编辑req.user对象

时间:2019-02-20 23:25:21

标签: node.js express passport.js

我正在直接在本教程中运行护照快速快递的基本身份验证策略。

(以下常见的Facebook策略,我实际上使用的是Passport-saml,但是这个问题与所有护照策略有关):

<script>

//1234  
function popit(url, pass ) {
  var person = prompt("Password?", "...");

  if (person == pass) {
    window.location.href=url;
  }
  else {
    alert('Invalid');
  }
}
</script>
<a href="" onclick="popit('/logs/uploadappointment?option=aaa', '1234');">FAIL - TEST</a>

or

<a href="/logs/uploadappointment?option=aaa">WORK - TEST</a>

我需要编辑passport.use(new FacebookStrategy({ clientID: FACEBOOK_APP_ID, clientSecret: FACEBOOK_APP_SECRET, callbackURL: "/auth/facebook/callback" }, function(accessToken, refreshToken, profile, cb) { //HOW DO I ATTACH THE profile OBJECT HERE TO THE PASSPORT USER? //OR IS THERE ANOTHER WAY TO SAVE profile FOR LATER? (without using a database) return cb(null, profile); } )); 对象,并从护照回调中附加req.user对象。这将使用户会话具有用户特定的配置文件数据。

然后,我将在认证中间件中使用profile和添加的req.user

profile

如何编辑护照用户对象以使其他个人资料信息可用?

2 个答案:

答案 0 :(得分:1)

尝试修改req.user似乎不是最佳实践(即使它可以工作)。我相信req.user在任何时候都应该与数据库中的用户相同。

但是,您可以使用passReqToCallback在Passport回调中使用req,并相应地设置req.session

passport.use(new FacebookStrategy({
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET,
    callbackURL: "/auth/facebook/callback",
    passReqToCallback: true
  },
  function(req, accessToken, refreshToken, profile, cb) {  
      req.session.profile = profile;
      return cb(null, profile);
  }
));

然后,您应该记住在未定义req.session.profile的任何请求上删除req.user,以便不保留有关注销用户的过时profile信息。

app.get("*", function(req, res, next){
    if(req.session.profile && !req.user)
        delete req.session.profile;
    next();
});

所有这些未经测试,但我相信它可能对您有用。

答案 1 :(得分:0)

passport-saml答案可能适用于其他策略:

profile将自动保存到用户对象。

诀窍在于,如果用户属性为空,则不保存。 IE:

{nameId:'russHanneman', sessionId: undefined}

sessionId不会进入用户对象。如果需要将用户cookie调整为与返回的profile不同,则可以在序列化它时进行以下操作:

passport.serializeUser(function(user, done) {
   done(null, {
      id: "custom value",
      nameId: user["userName"],
      email: user["email"]
   });
});

在护照中配置和序列化: http://www.passportjs.org/docs/configure/