Middleware Koa et SDK API intégrant Wechat, QQ, Baidu et Weibo
Middleware koa2, les développeurs peuvent obtenir les informations de base des utilisateurs (y compris le numéro d'utilisateur, le surnom, l'avatar) via ce middleware
npm install l-passport -S
Présentez l-passport et configurez-le
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 ;
} ) ;
Si vous devez configurer plusieurs plateformes (telles que web, ios, android), il est recommandé de vous référer au code suivant
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 ;
} ) ;
Si vous devez configurer plusieurs fournisseurs de services et plusieurs plateformes, il est recommandé de vous référer au code suivant
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
: - fournisseur de services (obligatoire)appId
: - ID de l'application (obligatoire)appSecret
: - Secret d'application (obligatoire)platform
: - plateforme de services (en option)redirect
: - adresse de rappel de l'application (facultatif)scope
: - la portée de l'autorisation demandée (facultatif)state
: - L'état actuel de l'application, vous pouvez spécifier n'importe quelle valeur, le fournisseur de services renverra cette valeur inchangée (facultatif)Remarque : différents fournisseurs de services gèrent différemment les adresses de rappel lors de l'authentification. Par exemple, WeChat ne vérifie pas la fonction de rappel, Weibo et QQ doivent uniquement vérifier le nom de domaine de la fonction de rappel et Baidu doit vérifier l'inclusion de la requête. L'adresse de rappel complète, y compris. paramètres
l-passport prend en charge deux façons de définir la fonction de rappel
1.Paramètres de configuration
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. Paramètres dynamiques
Mettez la redirection, l'état et la portée dans les paramètres de requête de la route, tels que /login/baidu?redirect=your_redirect&state=your_state&scope=your_scope
l-passport a été intégré comme suit :
- 1.qq : connexion QQ
- 2.baidu : connexion Baidu
- 3.weibo : connexion Weibo
- 4.wechat : connexion WeChat
Si les développeurs estiment que la stratégie de connexion actuellement intégrée ne peut pas répondre à leurs besoins, ils peuvent la développer eux-mêmes. Sa forme de base est la suivante :
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
Une fois l'authentification terminée, les informations utilisateur seront montées dans ctx.state.passport. Son format de base est le suivant :
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}