egg-passport 例子太少了,根本用不明白啊,能不能多加点官方例子?

Created on 25 Aug 2017  ·  26Comments  ·  Source: eggjs/egg

  • Node Version:
  • Egg Version:
  • Plugin Name:
  • Plugin Version:
  • Platform:
  • Mini Showcase Repository:
egg-passport

Most helpful comment

All 26 comments

我也觉得,这个文档和例子写了跟没写一样,所有的文件怎么写,搭建好了,如何使用?例子demo是什么?整了一下午,没搞明白,不如自己去研究egg session cookie

我看了好几天……还跑去看了依赖的源码才明白,其实用法不难,就是根本不写清楚那些函数是干嘛的,对新手不是很友好啊……

之前的 RFC 在:https://github.com/eggjs/egg/issues/38

egg-passport 只是对 http://passportjs.org/ 的 wrap,所以使用前需要先了解 passportjs 的基础用法。

也欢迎社区贡献文档。

我觉得自己的用户就自己做注册登陆吧,这样业务可以写的更灵活。
个人理解可以用页面控制分为两种:
A: 如果页面在服务器渲染的,passport用来做第三方的账户登陆,配制好密钥,回调地址

1 回调地址的控制器里面判断是否成功拿到了第三方信息,

2 控制器里拿到了微薄id,查找数据库有没有用户绑定了这个微薄id,a.有用户绑定了直接返回渲染的首页并且回传token。b.没有用户绑定过,渲染一个页面提示用户绑定,在这个页面里提交用户名,密码,微薄id到一个接口(依据你用邮箱,手机号,昵称使用不同的方式验证用户)。用户验证通过了在这个接口里绑定本地用户和微薄id,并且跳转到首页,如果失败了提示密码错误等

B:如果是单页面应用那访问第三方获用户信息的工作只能让前端来做,在回调页面访问接口把获取到的信息通过一个接口发给服务器,服务器根据信息eg:微薄id判断,如果本地用户绑定过直接返回本地用户的token和状态码告诉页面直接显示登陆之后的页面,如果没绑定过那么服务器返回状态码告诉前端显示绑定的页面,剩下的就是和上面一样验证用户判断是否绑定了。

egg-passport就是auth2吗

oauth 是一种协议规范,在这之上会有一些具体的实现,如微信开发平台,如 Twitter 等,passportjs 有此类的插件 http://passportjs.org/features

那egg-passport可以用来验证自己的api吗,类似jwt这种

你看看我那个链接,passportjs 有 passport-jwt 的扩展,你参考 egg-passport-xx 自己封装一个 egg-passport-jwt 即可

@acodercat 封装egg-passport-jwt时,需要修改egg-passport插件中的代码,修改文件egg-passport/lib/passport.js.

authenticate(strategy, options = {}) {
    // try to use successReturnToOrRedirect first
    if (!options.hasOwnProperty('successRedirect') && !options.hasOwnProperty('successReturnToOrRedirect')) {
      // app use set `ctx.session.returnTo = ctx.path` before auth redirect
      options.successReturnToOrRedirect = '/';
    }
    if (!options.hasOwnProperty('failWithError')) {
      options.failWithError = true;
    }
    return super.authenticate(strategy, options);
  }

注释掉这行代码options.successReturnToOrRedirect = '/';,这行代码的作用是为了在进行oauth2授权时,如果没有设置成功跳转链接,在授权完成后自动跳转到首页链接.
如果实现egg-passport-jwt插件,每个接口调用都会产生授权的过程,如果接口逻辑处理时间比较长,设置了successReturnToOrRedirect之后,就会提示404 not found.

试了下egg-passport-github,按照readme里面写的根本跑不起来。看到这个issue才发现不只是我一个人觉得文档例子没法理解。能不能出一个可以npm run dev直接跑起来的demo

主要有两点:

  1. mount路由
  2. 提供verify回调函数

也可以参考这个demo
https://github.com/zhennann/egg-born-showcase-watch-articles/blob/master/src/module/aa-login-sync/backend/src/main.js

  // authenticates routers
  app.passport.mount('github', {
    loginURL: `/api/${info.url}/passport/github`,
    callbackURL: `/api/${info.url}/passport/github/callback`,
  });

  // verify
  app.passport.verify(async function(ctx, profileUser) {
    return await ctx.service.user.verify(profileUser);
  });

提示

Error in /passport/github
Please set config.keys first

github的key和secret我已经配置

你这个很老的了吧。。。跟这个插件没关系,就是加个 config.keys,用于 cookie 加签的。

发自我的 iPhone

在 2017年12月1日,13:56,sharkshark notifications@github.com 写道:

提示

Error in /passport/github
Please set config.keys first
github的key和secret我已经配置


You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

很老是什意思? egg版本?

在配置文件里面加一个 config.keys = '你自己一个随机数' 即可,这个报错跟这个 issue 没啥关系,那是半年前的 egg 发布 1.0 的时候,egg-cookie 的一个变更了。

如果是新的,那可能是你 config 配置错了,是不是覆盖 module.exports 了

egg-passport这么多协议,如何在middleware哪一层拦截所有的路由都需要登陆,除了各自passport插件的登陆或者callback url

一个网站可能支持多种登陆方式,怎么根据用户采用的passport登陆方式(github, weibo等)来决定忽略哪些路由呢?

可以看下 example 和源码,拿到的 user 数据应该有区别的

在同时支持多种Strategy登陆方式的时候,如何知道当前用于是以何种Strategy登陆的?有没有ctx.passport.strategy这种变量?

返回的 user 里面有一个 provider 的

https://github.com/eggjs/egg-passport-github/blob/master/app.js#L19

谢谢!文档很用心,赞

egg的开发人员回复真积极,6的飞起,谢谢🙏

@zhanghuaqiang 不用修改源代码,options里把successReturnToOrRedirect设置为null即可;

const jwtAuth = app.passport.authenticate('jwt', {session: false, successReturnToOrRedirect: null});
Was this page helpful?
0 / 5 - 0 ratings

Related issues

zhaofinger picture zhaofinger  ·  3Comments

weijiatan456 picture weijiatan456  ·  3Comments

yuu2lee4 picture yuu2lee4  ·  3Comments

Leungkingman picture Leungkingman  ·  3Comments

wujianling picture wujianling  ·  3Comments