4

嗨,我正在使用 express 框架在 node.js 中创建一个站点。我正在尝试使用 facebox 来展示一个用户可以登录的框,这样网站上的音乐就不必停止播放。

我正在使用 mongoose-auth/everyauth 进行身份验证,但无法弄清楚如何做到这一点。

我需要能够将登录页面呈现为我相信的部分。我有以下几点:我认为使用 loginLocals 是答案?

任何人有任何想法!

var mongoose = require('mongoose')
    , Schema = mongoose.Schema
    , mongooseAuth = require('mongoose-auth');

var everyauth = require('everyauth')
    , Promise = everyauth.Promise;

    var UserSchema = new Schema({});
    UserSchema.plugin(mongooseAuth, {
        everymodule: {
            everyauth: {
                User: function () {
                    return User;
                }
            }
        },
                 password: {
                    loginWith: 'email'
                  , extraParams: {
                                    genre: String
                    }
                  , everyauth: {
                        getLoginPath: '/login'
                      , postLoginPath: '/login'
                      , loginView: 'login.jade'
                      , getRegisterPath: '/register'
                      , postRegisterPath: '/register'
                      , registerView: 'register.jade'
                      , loginSuccessRedirect: '/'
                      , registerSuccessRedirect: '/'

                                , loginLocals: function(req, res) {
                                    //console.log("ASD");
                                return res.partial('toop');
                                }
                    }
        }
    });
4

1 回答 1

1

如果您希望您的用户能够在不停止音乐的情况下通过 Everyauth 登录,那么您无法使用 Facebook 之类的灯箱来做到这一点。您需要 AJAX 来保持您的页面加载(以及因此您的音乐播放),但 OAuth 不能通过 AJAX 工作,因为它依赖于重定向。

你需要做这样的事情:

  • 当用户在“A”页面点击登录时,打开一个新的弹出窗口“B”指向你的登录过程
  • Everyauth 会将窗口“B”重定向到相关的 OAuth 提供者
  • 用户将进行身份验证并授予权限
  • 窗口“B”将被重定向回您的站点
  • 您需要结束该过程,并从弹出窗口“B”中与用户已成功登录的窗口“A”进行通信。您可以直接使用 Javascript 执行此操作,也可以让服务器通知原始页面(通过 websockets、comet、轮询等)
  • 您的音乐将一直在窗口“A”中播放
于 2012-03-05T09:13:46.373 回答