haw在登录SPA koa.js后加载用户信息

时间:2017-08-08 13:05:30

标签: mongodb reactjs redux passport.js koa

我通过护照(Koa,Mongodb,React,Redux)意识到了用户的授权。

router.post('/login', function(ctx, next) {

  return passport.authenticate('local', async function(err, user, info) {
      if (err) throw err;

      if (user === false) {
          ctx.status = 401;
          ctx.body = { error: info };
      } else {
          ctx.body = {
              success: true
          };
          await ctx.login(user);
      }
  })(ctx, next);
})

如果用户已登录,则会重定向到个人资料页面(主页)。

router.get('/login', function(ctx, next) {
  if (ctx.isAuthenticated()) {
      ctx.redirect('/');
  } else {
      ctx.body = fs.readFileSync(path.resolve(path.join('build', 'index.html')), 'utf8')
  }
});

由于我有一个水疗中心,我总是传递一个静态文件(通过反应路由器在客户端上路由)

问题是我无法理解在加载个人资料页面时如何获得有关用户的信息

如果我从React组件发送ajax-request(feth),那么请求另一个会话ID并且它与用户没有关联。

或者,我需要在服务器上执行此操作,但是如何在服务器上使用商店存储?

如何最好地解决这个问题?

1 个答案:

答案 0 :(得分:0)

嗯,虽然它可能不是最好的方法,但最简单的方法是在你的html文件中有一个部分,如..

<script type="text/javascript">
  window.currentUser = $$USER$$
</script>

然后对身体进行替换。

let content = fs.readFileSync(path.resolve(path.join('build', 'index.html')), 'utf8')
content = content.replace('$$USER$$', JSON.stringify(user))
ctx.body = content

在您的React应用中,您可以使用window.currentUser

相关问题