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)
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)
它没有明确记录,但有一种通过护照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)
| 归档时间: |
|
| 查看次数: |
72838 次 |
| 最近记录: |