如果经过身份验证的 NodeJS 则重定向

Posted

技术标签:

【中文标题】如果经过身份验证的 NodeJS 则重定向【英文标题】:Redirect If Authenticated NodeJS 【发布时间】:2018-05-11 19:15:43 【问题描述】:

我正在使用以下技术

NodeJS ExpressJS VueJS ngnix

我将x-access-token 存储在localstorage 中。

当用户访问站点www.example.com 时,vuejs 组件会执行以下操作

通过调用身份验证端点来验证用户是否已登录 如果通过验证,它会重定向到www.example.com/controlpanel

当然,问题是 vuejs 组件需要一段时间才能加载,因此页面加载后会被重定向。

有没有办法以更清洁的方式处理上述情况。甚至使用ngnix

谢谢

【问题讨论】:

你在使用beforeRouteEnter导航卫士 @VamsiKrishna 我根本没有使用vue-router。我正在处理 expressjs 中的路由 【参考方案1】:

在访问首页时渲染的组件中(根路由/) 添加beforeRouteEnter()导航守卫如下:

//in root route component options

beforeRouteEnter(to, from, next)
    myAjax.get('/auth').then((res) => 
        if(res.data.user)
            //user logged in
            next('/controlpanel');
        else
            next('/');
        
    );

这个守卫在路由组件被渲染之前被调用并且只有当你调用next()时才会被确认和渲染

请记住,您将无法访问组件的 vue 实例,因为组件尚未创建

要访问beforeRouteEnter() 中的 vue 实例,请执行以下操作:

beforeRouteEnter(to, from, next)
    next(vm => 
        //acess the component's instance using vm
    
   

欲了解更多信息,请查看In-Component Guards

【讨论】:

但我没有使用vue-router 是的!它确实有效,但仍然存在滞后。你知道不涉及vue的解决方案吗? @user3052526 执行异步操作时会有延迟...。更好的解决方案是显示加载器 我想我现在会实施这个解决方案。如果您想到不涉及 vuejs 的任何事情,请分享。谢谢大佬! @user3052526 是的......如果您找到更好的解决方案,请随时在我的答案中添加编辑:)

以上是关于如果经过身份验证的 NodeJS 则重定向的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Laravel 5.3 中通过身份验证,则重定向

Spring Security:如果身份验证失败,则重定向到登录页面

Spring Security - 如果已经登录则重定向

Spring Security - 如果已经登录则重定向

Nodejs和PassportJs:如果身份验证失败,则不会调用passport.authenticate后重定向中间件

Firebase 身份验证 Flutter 中的电话号码