如何使用Passport JS保护Angular 4路由?

时间:2017-08-19 00:49:24

标签: node.js angular google-app-engine express passport.js

我计划使用Node JSExpress JSPassport 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

因此,我应该进行哪些更改才能对用户进行身份验证,然后将用户重定向到主页。还要保护应用程序中的其他路由/子路由?

1 个答案:

答案 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");
});

...或使用像connect-ensure-login

这样的模块

确保身份验证

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的会话中。