【问题标题】:Accessing session in everyauth.password?在everyauth.password 中访问会话?
【发布时间】:2012-06-24 22:10:56
【问题描述】:

我正在开发一个 node express 应用程序,并且我已经让它在 Facebook 身份验证中运行良好。我现在正在尝试启用我们自己的电子邮件/密码登录并将其运行到一个障碍。使用 Facebook,我可以在身份验证期间访问和写入会话:

everyauth.faceboook
    // Basic stuff
    .findOrCreateUser( function( sess, accessToken, extra, fbUser) {
        var promise = this.Promise();
        sess.myvar = myvar

        // Find user in DB, etc
        promise.fulfill(fbUser);
        return promise()

这很好用,因为我可以在此方法中将稍后需要的一些东西保存到会话中。但是我不确定在使用everyauth密码登录时如何做同样的事情:

everyauth.password
    // Basic stuff
    .authenticate( function(email, password) {
        var promise = this.Promise();             
        // Create new user in DB, etc

        // Now I need to save stuff to the session but I'm not sure how to access
        // it in here...
        promise.fulfill(newUser)
        return promise

那么有什么方法可以在everyauth.password 的身份验证和登录方法(使用相同的API)中访问会话吗?

【问题讨论】:

    标签: node.js everyauth


    【解决方案1】:

    您无法从您的 .authenticate 函数访问会话,并且您在此处尝试执行的操作感觉不对。您的.authenticate 函数应该只是通过login 参数查找用户,验证password 参数是否与用户的密码匹配,然后通过回调返回该用户的用户对象。如果你想使用everyauth 来创建用户,你应该使用.validateRegistration.registerUser 函数。

    【讨论】:

    • 好的 - 谢谢。我现在肯定在滥用身份验证功能并将改变它。但是如果我想使用 .registerUser 创建一个新用户 - 我至少可以访问那里的会话吗?
    • 不,你不能。所以这是一个好兆头,表明你正在尝试做的事情有点不寻常。您可能需要实现自己的.addToSession 函数来执行标准功能以及您需要完成的任何其他操作。您在会话中保存了哪些只能在用户创建期间确定的内容?
    • 基本上我打算在会话中保存一个标志,指示用户是新用户(即刚刚完成注册)还是老用户。根据您所说,我认为更好的方法可能是将其存储在用户模型本身中,然后当我需要确定显示时,我可以通过下一页的 req.user 访问它是否有新用户流。
    • 对——将这些信息放在用户对象中是处理这个问题的典型方法。
    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2014-09-03
    • 2012-02-01
    相关资源
    最近更新 更多