【问题标题】:Using flash messages with Angular Routing使用带有 Angular 路由的 flash 消息
【发布时间】:2016-03-27 14:35:32
【问题描述】:

我正在构建一个简单的 SPA,使用 MEAN 堆栈和 Passportjs 进行身份验证,用户可以在其中创建、查看和回答民意调查。页面路由是通过 angular 和 $routeProvider 完成的。用于创建/管理投票的 api 调用和注册/登录调用是通过快速路由完成的。一切正常,我可以创建一个用户,也可以登录,但我现在遇到登录或注册失败时护照生成的闪存消息的问题。

我正在将消息分配给我的 passport.js 文件中的 req.flash,但我找不到如何将这些消息发送到客户端以及如何接收和显示它们。我发现的所有示例和问答都使用专门的快速路由和模板作为 ejs。我对它们没有任何反对意见,但如果可能的话,我宁愿不使用它们。

这里有一些sn-ps:

注册功能发现邮件已经存在时返回语句:

return done(null, false, req.flash('signupMessage', 'That email is already taken.'));

注册路由通过快递完成。重定向工作正常,我可以看到数据库中的用户:

app.post('/signup', passport.authenticate('local-signup', {
    successRedirect : '/',
    failureRedirect : '/signup',
    failureFlash: true
        }));

如果我只使用快速路由并且我使用的是 ejs,我可以实现这个 sn-p - 但我宁愿不这样做。问题是:有什么替代方案?如何将 req.flash 中设置的消息发送给客户端,如何检索它们?

app.get('/signup', function(req, res) {
    // render the page and pass in any flash data if it exists
    res.render('signup.ejs', { message: req.flash('signupMessage') });
});

【问题讨论】:

标签: javascript angularjs express passport.js mean


【解决方案1】:

我在这里找到了解决问题的方法:How to combine passport and angular-ui routing

我只需要从这里更改快速路由:

app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/',
failureRedirect : '/signup',
failureFlash: true
    }));

到这里:

 // Express Route with passport authentication and custom callback
app.post('/api/login', function(req, res, next) {
  passport.authenticate('local-login', function(err, user, info) {
    if (err) {
    return next(err); 
  }
  if (user === false) {
    res.status(401).send(req.flash('signupMessage'));  
  } else {
    res.status(200).send("success!"); 
  }
})(req, res, next); 
});

这样我会收到一些信息返回给客户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-26
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多