البرامج الوسيطة 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
تم دمج جواز السفر على النحو التالي:
- 1.qq: تسجيل الدخول ف ف
- 2.بايدو: تسجيل دخول بايدو
- 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" : {}
}