Wechat、QQ、Baidu、Weibo を統合する Koa ミドルウェアと API SDK
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 ;
} ) ;
複数のプラットフォーム (Web、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
: - アプリケーション ID (必須)appSecret
: - アプリケーション シークレット (必須)platform
: - サービスプラットフォーム (オプション)redirect
: - アプリケーションのコールバック アドレス (オプション)scope
: - 適用される許可の範囲 (オプション)state
: - アプリケーションの現在の状態。任意の値を指定できます。サービスプロバイダーはこの値を変更せずに返します (オプション)注: サービス プロバイダーによって、認証時のコールバック アドレスの処理方法が異なります。たとえば、WeChat はコールバック関数をチェックしませんが、Weibo と QQ はコールバック関数のドメイン名のみをチェックする必要があり、Baidu はクエリを含むコールバック アドレス全体をチェックする必要があります。パラメータ
l-passport はコールバック関数を設定する 2 つの方法をサポートしています
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 など、ルートのクエリ パラメーターにリダイレクト、状態、スコープを入力します。
l-passport は次のように統合されました。
- 1.qq: QQ ログイン
- 2.baidu: 百度ログイン
- 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" : {}
}