我计划使用Node JS
,Express JS
和Passport JS
设置Google登录。在此过程中,我使用应用程序凭据配置了Google策略,创建了一个带有登录按钮的示例.ejs
页面,然后我就可以登录并检索用户个人资料。后来,我删除了示例页面并尝试将所有静态Angular 4文件(使用angular-cli构建)放在Public
目录中,并编写了以下逻辑,
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function(req, res, next) {
if (req.isAuthenticated()) {
res.redirect("/home");; // Angular route
} else {
// require the user to log in
// redirects to Google Sign-in page
res.redirect("/auth/google");
}
});
现在,当我启动服务器并访问http://localhost:3000
时,我没有看到任何重定向到Google登录页面,而是浏览器直接呈现http://localhost:3000/home
。
因此,我应该进行哪些更改才能对用户进行身份验证,然后将用户重定向到主页。还要保护应用程序中的其他路由/子路由?
答案 0 :(得分:1)
if
请求以简单的方式进行会话... app.get('/home', function(req, res) {
if(req.session){ //session exists (requesting user has a session)
// Angular route code goes here to prevent non-authed user access
}else{res.redirect("/");} //or res.redirect("/auth/google");
});
确保身份验证
app.get('/home',
ensureLoggedIn('/auth/google'),
function(req, res) {
// Angular route code goes here to prevent non-authed user access
});
如果用户未被初始化,请求将被重定向到/auth/google
,原始请求URL(/home
)将保存到req.session.returnTo的会话中。