Koa-Middleware und API-SDK zur Integration von Wechat, QQ, Baidu und Weibo
Mit der Koa2-Middleware können Entwickler über diese Middleware grundlegende Benutzerinformationen (einschließlich Benutzernummer, Spitzname und Avatar) abrufen
npm install l-passport -S
Führen Sie L-Passport ein und konfigurieren Sie es
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 ;
} ) ;
Wenn Sie mehrere Plattformen (z. B. Web, iOS, Android) konfigurieren müssen, wird empfohlen, auf den folgenden Code zu verweisen
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 ;
} ) ;
Wenn Sie mehrere Dienstanbieter und mehrere Plattformen konfigurieren müssen, wird empfohlen, auf den folgenden Code zu verweisen
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
: - Dienstanbieter (erforderlich)appId
: – Anwendungs-ID (erforderlich)appSecret
: – Anwendungsgeheimnis (erforderlich)platform
: - Serviceplattform (optional)redirect
: – Rückrufadresse der Anwendung (optional)scope
: – der Umfang der beantragten Erlaubnis (optional)state
: – Der aktuelle Status der Anwendung. Sie können einen beliebigen Wert angeben. Der Dienstanbieter gibt diesen Wert unverändert zurück (optional).Hinweis: Verschiedene Dienstanbieter behandeln Rückrufadressen bei der Authentifizierung unterschiedlich. Beispielsweise überprüft WeChat die Rückruffunktion nicht, Weibo und QQ müssen nur den Domänennamen der Rückruffunktion überprüfen und Baidu muss einschließlich der Abfrage die gesamte Rückrufadresse überprüfen Parameter
l-passport unterstützt zwei Möglichkeiten zum Festlegen der Rückruffunktion
1.Konfigurationseinstellungen
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. Dynamische Einstellungen
Geben Sie Umleitung, Status und Bereich in die Abfrageparameter der Route ein, z. B. /login/baidu?redirect=your_redirect&state=your_state&scope=your_scope
l-passport wurde wie folgt integriert:
- 1.qq: QQ-Anmeldung
- 2.baidu: Baidu-Anmeldung
- 3.weibo: Weibo-Login
- 4.wechat: WeChat-Anmeldung
Wenn Entwickler der Meinung sind, dass die derzeit integrierte Anmeldestrategie ihre Anforderungen nicht erfüllt, können sie sie selbst erweitern. Die Grundform lautet wie folgt:
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
Nach Abschluss der Authentifizierung werden die Benutzerinformationen in ctx.state.passport eingebunden. Das Grundformat ist wie folgt:
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}