集成微信(wechat)、QQ(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
: - 应用编号(必填)appSecret
: - 应用秘钥(必填)platform
: - 服务平台(选填)redirect
: - 应用回调地址(选填)scope
: - 申请的权限范围(选填)state
: - 应用当前状态,可以指定任意值,服务提供商会原封不动地返回这个值(选填)注意:不同的服务提供商之间,在认证时对回调地址的处理方式各不相同,如微信不会检查回调函数,微博和QQ只需核查回调函数的域名,而百度则需要核查包括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.动态设置
将redirect、state、scope放在路由的Query参数中,如/login/baidu?redirect=your_redirect&state=your_state&scope=your_scope
l-passport已经集成如下:
- 1.qq:QQ登录
- 2.baidu:百度登录
- 3.weibo:微博登录
- 4.wechat:微信登录
如果开发者觉得当前集成的登录策略无法满足需求时,可以自行拓展,其基本形式如下:
class YourStragety {
// 服务提供商提供的授权地址
getAuthorizeUrl(redirect, state, scope) {}
// 用户通过授权后的认证过程
authorize(code) {}
}
passport.use('your_stagety_name', YourStragety);
认证完成后用户信息将挂载ctx.state.passport中,其基本格式如下:
{
"provider": "服务提供商",
"uid" : "用户编号",
"nickname": "用户昵称",
"avatar" : "用户头像",
"body" : {}
}
1. 解析JWT时可能出现的错误 如果使用过期的JWT,在解析时将出现错误: io.jsonwebtoken.ExpiredJwtException: JWT expired at 2022-09-06T17:33:03Z. Current time: 2022-09-08T09:04:26Z, a difference of 142283930 milliseconds. Allowed cl
/*! * ATTENTION: THIS FREE LICENSE IS ONLY FOR PERSONAL NON-COMMERCIAL USER. FOR COMMERCIAL PURPOSES, PLEASE PURCHASE A COMMERCIAL LICENSE! * * module: Centcount Analytics Free Passport PHP Code * * v
场景 laravel/passport Consuming Your API With JavaScript 使用laravel/passport 访问自身的接口的时候 十分简单, 只是需要在 web middleware graoup 添加 \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class 但是laravel5.5版本却有个
laravel 使用passport 生成token 报错 Replicating claims as headers is deprecated and will removed** // 创建没有作用域的令牌... $token = $user->createToken('Token Name')->accessToken; 提示报错 解决办法,将jwt组件 降级 处理 composer
L++ 是一个编程语言,最终转换成 C++。使用 Lisp 风格的语法。 Hello World: (main (prn "Hello, World!"))
Blue Gene®/L 超级计算机为科学家提供了一流的计算能力和复杂的数据虚拟化工具,帮助他们深入学科的前沿。了解此项技术如何帮助计算分子生物学家创建蛋白质折叠和错误折叠模拟,以更多好理解这些复杂的分子。
NimROD L&F是一个具有多种主题的Swing皮肤。
Converts HSL values to an RGB object Parameters hnumberhue snumbersaturation lnumberluminosity Returns: object RGB object in the following format: { r numberred, g numbergreen, b numberblue, hex strin
Converts HSL values to a hex representation of the color Parameters hnumberhue snumbersaturation lnumberluminosity Returns: string hex representation of the color
描述 (Description) 字符类[\p{L}&&[^\p{Lu}]]匹配除大写字母之外的任何字符。 例子 (Example) 以下示例显示了Unicode字符类匹配的用法。 package com.wenjiangs; import java.util.regex.Matcher; import java.util.regex.Pattern; public class UnicodeCh