如何知道用户是否使用passport.js登录?

RMo*_*s13 96 node.js express passport.js

我已经阅读passport.js了两天的信息和样本,但我不确定在那之后我做了所有的身份验证过程.

我如何知道我是否已登录,例如,我将有一个带登录或注销按钮的导航栏,是否有一些变量如下面的代码?

if (login)
   <button>logout</button>
else 
   <button>login</button>
Run Code Online (Sandbox Code Playgroud)

mok*_*oka 194

如果用户已登录,passport.js则会为每个请求创建user对象,您可以检查是否存在于任何中间件中:reqexpress.js

if (req.user) {
    // logged in
} else {
    // not logged in
}
Run Code Online (Sandbox Code Playgroud)

您可以express.js为此创建简单的中间件,它将检查用户是否已登录,如果没有 - 将重定向到/login页面:

function loggedIn(req, res, next) {
    if (req.user) {
        next();
    } else {
        res.redirect('/login');
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

app.get('/orders', loggedIn, function(req, res, next) {
    // req.user - will exist
    // load user orders and render them
});
Run Code Online (Sandbox Code Playgroud)

  • 它不是全局的它只是在请求对象上. (3认同)
  • 我发现如果我没有提供router.get()和任何中间件来检查身份验证,就像在"router.get('/',my_controller.index)"中那样,那么就不会查阅护照了,req.user将永远不确定.这很令人沮丧,因为我想允许任何访问者调用API,但根据请求的人来定制响应的内容. (2认同)
  • 有人可以解释这是不可利用的吗?该检查只是查看它们是否是请求中的用户对象.会话验证在哪里? (2认同)

cyb*_*bat 43

如果您想在模板中使用它,因为您的代码示例似乎表明您可以创建一些中间件,例如:

app.use(function (req, res, next) {
  res.locals.login = req.isAuthenticated();
  next();
});
Run Code Online (Sandbox Code Playgroud)

在设置护照后将代码放在某处.

然后在模板中使用它(swig示例)

{% if login %}
<button>logout</button>
{% else %} 
<button>login</button>
{% endif %}
Run Code Online (Sandbox Code Playgroud)


Has*_*alp 5

它没有明确记录,但有一种通过护照isAuthenticated()插入的方法。 可以如下使用,req

req.isAuthenticated() // returns true if auth, false if not
Run Code Online (Sandbox Code Playgroud)
// auth.js
module.exports = {
  ensureAuthenticated: (req, res, next) => {
    if (req.isAuthenticated()) {
      return next()
    }
    res.redirect('/login') // if not auth
  },

  forwardAuthenticated: (req, res, next) => {
    if (!req.isAuthenticated()) {
      return next()
    }
    res.redirect('/dashboard');  // if auth    
  }
}
Run Code Online (Sandbox Code Playgroud)
// app.js
app.get('/dashboard', ensureAuthenticated, (req, res) => res.render('dashboard'))
app.get('/login', forwardAuthenticated, (req, res) => res.render('login'))
app.get('/register', forwardAuthenticated, (req, res) => res.render('register'))
Run Code Online (Sandbox Code Playgroud)