Middleware Koa y API SDK que integran Wechat, QQ, Baidu y Weibo
middleware koa2, los desarrolladores pueden obtener la información básica de los usuarios (incluido el número de usuario, apodo y avatar) a través de este middleware
npm install l-passport -S
Introduce l-passport y configúralo.
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 necesita configurar varias plataformas (como web, ios, android), se recomienda consultar el siguiente código
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 necesita configurar múltiples proveedores de servicios y múltiples plataformas, se recomienda consultar el siguiente código
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
: - proveedor de servicios (obligatorio)appId
: - ID de la aplicación (obligatorio)appSecret
: - Secreto de la aplicación (obligatorio)platform
: - plataforma de servicio (opcional)redirect
: - dirección de devolución de llamada de la aplicación (opcional)scope
: - el alcance del permiso solicitado (opcional)state
: - El estado actual de la aplicación, puede especificar cualquier valor, el proveedor de servicios devolverá este valor sin cambios (opcional)Nota: Los diferentes proveedores de servicios manejan las direcciones de devolución de llamada de manera diferente durante la autenticación. Por ejemplo, WeChat no verifica la función de devolución de llamada, Weibo y QQ solo necesitan verificar el nombre de dominio de la función de devolución de llamada, y Baidu debe verificar si incluye Consulta La dirección de devolución de llamada completa, incluida. parámetros
l-passport admite dos formas de configurar la función de devolución de llamada
1.Ajustes de configuración
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. Configuraciones dinámicas
Coloque redirección, estado y alcance en los parámetros de consulta de la ruta, como /login/baidu?redirect=your_redirect&state=your_state&scope=your_scope
l-passport se ha integrado de la siguiente manera:
- 1.qq: inicio de sesión QQ
- 2.baidu: inicio de sesión de Baidu
- 3.weibo: inicio de sesión en Weibo
- 4.wechat: inicio de sesión en WeChat
Si los desarrolladores sienten que la estrategia de inicio de sesión integrada actualmente no puede satisfacer sus necesidades, pueden expandirla ellos mismos. Su forma básica es la siguiente:
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
Una vez completada la autenticación, la información del usuario se montará en ctx.state.passport. Su formato básico es el siguiente:
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}