Middleware Koa dan API SDK mengintegrasikan Wechat, QQ, Baidu dan Weibo
middleware koa2, pengembang dapat memperoleh informasi dasar pengguna (termasuk nomor pengguna, nama panggilan, avatar) melalui middleware ini
npm install l-passport -S
Perkenalkan l-passport dan konfigurasikan
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 ;
} ) ;
Jika Anda perlu mengonfigurasi beberapa platform (seperti web, ios, android), disarankan untuk merujuk ke kode berikut
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 ;
} ) ;
Jika Anda perlu mengonfigurasi beberapa penyedia layanan dan beberapa platform, disarankan untuk merujuk pada kode berikut
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
: - penyedia layanan (wajib)appId
: - ID Aplikasi (wajib)appSecret
: - Rahasia aplikasi (wajib)platform
: - platform layanan (opsional)redirect
: - alamat panggilan balik aplikasi (opsional)scope
: - cakupan izin yang diajukan (opsional)state
: - Status aplikasi saat ini, Anda dapat menentukan nilai apa pun, penyedia layanan akan mengembalikan nilai ini tanpa perubahan (opsional)Catatan: Penyedia layanan yang berbeda menangani alamat panggilan balik secara berbeda selama otentikasi. Misalnya, WeChat tidak memeriksa fungsi panggilan balik, Weibo dan QQ hanya perlu memeriksa nama domain dari fungsi panggilan balik, dan Baidu perlu memeriksa termasuk Query Seluruh alamat panggilan balik termasuk parameter
l-passport mendukung dua cara untuk mengatur fungsi panggilan balik
1.Pengaturan konfigurasi
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. Pengaturan dinamis
Masukkan pengalihan, status, dan cakupan dalam parameter Kueri rute, seperti /login/baidu?redirect=your_redirect&state=your_state&scope=your_scope
l-paspor telah terintegrasi sebagai berikut:
- 1.qq: masuk QQ
- 2.baidu: masuk Baidu
- 3.weibo: masuk ke weibo
- 4.wechat: masuk WeChat
Jika pengembang merasa bahwa strategi login terintegrasi saat ini tidak dapat memenuhi kebutuhan mereka, mereka dapat mengembangkannya sendiri. Bentuk dasarnya adalah sebagai berikut:
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
Setelah otentikasi selesai, informasi pengguna akan dipasang di ctx.state.passport. Format dasarnya adalah sebagai berikut:
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}