Comments (34)
@yandongxu @dangyanglim
https://github.com/leiyanggz/egg-passport-local
from egg.
以 oauth 登录作为标准的示例实现。
from egg.
from egg.
哈哈,这个也挺老了
from egg.
@popomore 我看它是最完善的。
from egg.
各种插件一直都在更新 http://web.npm.alibaba-inc.com/package/passport-outlook
from egg.
https://github.com/rkusa/koa-passport
from egg.
淘宝登录也有需求 egg-taobao-login
from egg.
egg-dingtalk-login 🤔
from egg.
认领 egg-weibo-login,接一个先试试
from egg.
看来还是得封装 egg-passport-xxx
,因为需要统一约定处理 afterAuth,并且将 {token, tokenSecret, profile}
转换为统一字段约定的 user,至少要包含哪些统一命名的字段。
from egg.
这些 passport 的 adapter 跟插件有些区别吧,需允许多个共存,不一样的 eggPlugin.name?
from egg.
感觉直接传 Strategy 实例比较好,不同的 Strategy 参数不一样,也可能会有两个。
exports.passport = {
strategy: [
new TwitterStrategy({
consumerKey: TWITTER_CONSUMER_KEY,
consumerSecret: TWITTER_CONSUMER_SECRET,
callbackURL: "http://127.0.0.1:3000/auth/twitter/callback"
},
function(token, tokenSecret, profile, cb) {
User.findOrCreate({ twitterId: profile.id }, function (err, user) {
return cb(err, user);
});
})
]
};
from egg.
把 passport 的 callback API 都要改成 promise 的
from egg.
auto0 还有一个 params 参数: accessToken, refreshToken, extraParams, profile
https://github.com/auth0/passport-auth0#configuration
from egg.
@popomore 还是改成 passport-xx 模式了,每个插件都需要按照统一 user 数据格式实现 verify 方法,生成一个 user,再由应用自行实现总的 verify 来做最终用户校验。没办法每个插件能使用到数据库实现 verify 的。
from egg.
但这个就不算 passport 了,用什么来存储用户信息和 passport 没关系。内部可以直接在 Strategy 里面封装获取用户信息。
from egg.
内部可以直接在 Strategy 里面封装获取用户信息。
@popomore 对啊,内部应用代码就不需要实现 verify 了
from egg.
app.passport.verify 的 hook 就是替换 strategy 里的 verify callback 么?
from egg.
@popomore 不完全是,strategy verify callback 有 passport-xxx 插件实现。而 app.passport.verify 是我们封装过的,给应用使用的。这样一个应用同时接入多种 strategy,都可以通过同一个 app.passport.verify 实现最终核实过程。
from egg.
恩,功能是一样的,只是数据格式是否统一。他的 passport-stragery
基类其实什么都没做,约定比较松散。
from egg.
只是我们约定插件来实现 verify callback
from egg.
demo eggjs/examples#14
from egg.
对于每次都去缓存读取用户信息的 user,需要默认关闭 passport-session 策略。
- https://github.com/jaredhanson/passport/blob/master/lib/http/request.js#L44
- https://github.com/jaredhanson/passport/blob/master/lib/middleware/authenticate.js#L252
const auth = app.passport.authenticate('alipaysession', {
session: false,
successReturnToOrRedirect: false,
successRedirect: false,
});
// 将 auth 加入全局中间件,让每个请求都过 alipaysession
app.use(auth);
但是要追求高性能的话,alipaysession 应该直接走普通中间件,不走 passport 这台,因为它是每次请求都去缓存读取数据的。
from egg.
@shaoshuai0102 https://github.com/eggjs/egg-passport-weibo 基本不需要做,我需要想想怎么 mock 方便写单元测试才是王道。
from egg.
这个是不是还缺篇文档?
from egg.
恩,要加一下
from egg.
passport-local 该怎么做?有参考么?
from egg.
@yandongxu 我也不会这个 passport-local
from egg.
@leiyanggz 这个没写测试?
from egg.
为什么在egg-passport中, 重写passport的方法时, 要把callback去掉, 是暂时不支持还是不打算支持呀?
from egg.
@jackhutu 我们最佳实践是 generator function 和 async function,所有的代码应该看不到 callback。
from egg.
async login() {
const { body } = this.ctx.request;
const { email: _email, password: _password } = body;
const rule = {
email: {
type: 'email',
},
password: {
type: 'password',
},
};
try {
this.ctx.validate(rule);
} catch (err) {
console.log(err);
this.ctx.redirect('/user');
return;
}
const user = await this.app.mysql.get('users', { email: _email });
const dbpw = user.password;
const fmpw = crypto.MD5(_password).toString();
if (user && dbpw === fmpw) {
console.log('登陆成功');
this.app.passport.serializeUser(async (ctx, user) => {
console.log('000000', user);
// 保存用户信息到session
});
this.ctx.redirect('/user');
} else {
console.log('登陆失败');
}
}
@fengmk2 本地鉴权怎么用啊?感觉调用this.app.passport.serializeUser并没有成功啊 session里没有东西
this.app.passport.deserializeUser方法也没用 教程省略了太多 对小白太难了 求指点
from egg.
app.passport.serializeUser
是写在 app.js 的
from egg.
Related Issues (20)
- extend/application.js空导出,导致接口返回404 HOT 1
- 文档链接显示错误
- 依照官网初始化项目 HOT 1
- eggjs处理服务端请求有超时时间吗 HOT 3
- 在 service 中 extends egg 暴露的 Service 项目无法启动 HOT 1
- egg-router-plus 根 router 应该支持正则 HOT 1
- 能否将依赖的urllib升级为3.25的系列,而不是现在的2.41.0 HOT 2
- 怎么在没有app上下文的文件中 获取config中的配置? HOT 4
- 使用 oxlint 代替 eslint HOT 5
- egg 运行一段时间后,就会退出 HOT 1
- Track Progress of PR #5332 Towards Merging into Master
- Follow-up on PR #5334: Allow to create httpClient from app
- Track merging PR #5336 into master branch
- 服务器 egg-scrips start 无法启动,一直提示文件找不到。但是本地能正常运行 HOT 5
- Track merging of PR #5339 into master
- Track bugfix for httpclient.safeCurl typing
- eggjs返回的响应头为什么是使用小写? HOT 4
- 初始化项目跑不起来 HOT 1
- 为什么在服务启动命令中添加参数在服务生命周期中获取不到? HOT 2
- enableH2 开启的时候使用 undici v6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from egg.