Промежуточное ПО Koa и API SDK, интегрирующее Wechat, QQ, Baidu и Weibo
koa2, разработчики могут получать основную информацию о пользователях (включая номер пользователя, псевдоним, аватар) через это промежуточное программное обеспечение.
npm install l-passport -S
Внедряем l-passport и настраиваем его
const passport = require ( 'l-passport' ) ;
// 微信登录:设置appId与app secret
passport . initialize ( {
provider : 'wechat'
appId : 'your_app_id' ,
appSecret : 'your_app_secret'
} ) ;
router . get ( '/login/wechat' , passport . authorization ( 'wechat' ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
Если вам нужно настроить несколько платформ (например, Интернет, iOS, Android), рекомендуется обратиться к следующему коду
const passport = require ( 'l-passport' ) ;
passport . initialize ( {
provider : 'wechat' ,
clients : [
{ platform : 'web' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
{ platform : 'ios' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
{ platform : 'android' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
]
} ) ;
router . get ( '/login/wechat_web' , passport . authorization ( 'wechat' , { platform : 'web' } ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
router . get ( '/login/wechat_ios' , passport . authorization ( 'wechat' , { platform : 'ios' } ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
router . get ( '/login/wechat_android' , passport . authorization ( 'wechat' , { platform : 'android' } ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
Если вам необходимо настроить несколько поставщиков услуг и несколько платформ, рекомендуется обратиться к следующему коду.
const passport = require ( 'l-passport' ) ;
passport . initialize ( [
{
provider : 'wechat' ,
clients : [
{ platform : 'web' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
{ platform : 'ios' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
{ platform : 'android' , appId : 'your_app_id' , appSecret : 'your_app_secret' } ,
]
} ,
{
provider : 'baidu' ,
clients : [
{ platform : 'web' , appId : 'your_app_id' , appSecret : 'your_app_secret' , redirect : 'your_baidu_redirect' } ,
{ platform : 'ios' , appId : 'your_app_id' , appSecret : 'your_app_secret' , redirect : 'your_baidu_redirect' } ,
{ platform : 'android' , appId : 'your_app_id' , appSecret : 'your_app_secret' , redirect : 'your_baidu_redirect' } ,
]
}
] ) ;
router . get ( '/login/wechat_web' , passport . authorization ( 'wechat' , { platform : 'web' } ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
router . get ( '/login/baidu_ios' , passport . authorization ( 'baidu' , { platform : 'ios' } ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
provider
: - поставщик услуг (обязательно)appId
: — Идентификатор приложения (обязательно)appSecret
: — Секрет приложения (обязательно)platform
: - сервисная платформа (опционально)redirect
: - адрес обратного вызова приложения (необязательно)scope
: - объем запрашиваемого разрешения (необязательно)state
: — Текущее состояние приложения, можно указать любое значение, поставщик услуг вернет это значение без изменений (необязательно)Примечание. Разные поставщики услуг по-разному обрабатывают адреса обратного вызова во время аутентификации. Например, WeChat не проверяет функцию обратного вызова, Weibo и QQ необходимо проверить только имя домена функции обратного вызова, а Baidu необходимо проверить, включая запрос. Весь адрес обратного вызова, включая весь адрес обратного вызова. параметры
l-passport поддерживает два способа установки функции обратного вызова
1.Настройки конфигурации
const passport = require ( 'l-passport' ) ;
passport . initialize ( {
provider : 'baidu'
appId : 'your_app_id' ,
appSecret : 'your_app_secret' ,
redirect : 'your_app_redirect' ,
state : 'your_app_state' ,
scope : 'your_app_scope'
} ) ;
router . get ( '/login/baidu' , passport . authorization ( 'baidu' ) , async ( ctx ) => {
ctx . body = ctx . state . passport ;
} ) ;
2. Динамические настройки
Укажите перенаправление, состояние и область действия в параметрах запроса маршрута, например /login/baidu?redirect=your_redirect&state=your_state&scope=your_scope.
l-passport был интегрирован следующим образом:
- 1.qq: вход в систему QQ
- 2.baidu: вход в Baidu
- 3.weibo: вход в Weibo
- 4.wechat: вход в WeChat
Если разработчики считают, что интегрированная в настоящее время стратегия входа в систему не может удовлетворить их потребности, они могут самостоятельно расширить ее. Ее базовая форма выглядит следующим образом:
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
После завершения аутентификации информация о пользователе будет смонтирована в ctx.state.passport. Ее основной формат следующий:
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}