l passport
1.0.0
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 ;
} ) ;
여러 플랫폼(웹, iOS, 안드로이드 등)을 구성해야 하는 경우 다음 코드를 참조하는 것이 좋습니다.
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는 Query를 포함한 전체 콜백 주소를 확인해야 합니다. 매개변수
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와 같이 경로의 쿼리 매개변수에 리디렉션, 상태 및 범위를 입력합니다.
l-passport가 다음과 같이 통합되었습니다.
- 1.qq: QQ 로그인
- 2.바이두: 바이두 로그인
- 3.웨이보: 웨이보 로그인
- 4.wechat: 위챗 로그인
개발자가 현재 통합된 로그인 전략이 자신의 요구 사항을 충족할 수 없다고 생각하는 경우 기본 형태는 다음과 같습니다.
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl ( redirect , state , scope ) { }
// 用户通过授权后的认证过程
authorize ( code ) { }
}
passport . use ( 'your_stagety_name' , YourStragety ) ;
인증이 완료되면 사용자 정보가 ctx.state.passport에 마운트됩니다. 기본 형식은 다음과 같습니다.
{
"provider" : "服务提供商" ,
"uid" : "用户编号" ,
"nickname" : "用户昵称" ,
"avatar" : "用户头像" ,
"body" : {}
}