繁体   English   中英

如果未登录,如何将用户重定向到登录页面

[英]How to redirect user to sign in page if not logged in

如果用户尝试访问 MyAccountController,我正在尝试将用户重定向到登录页面。 现在的问题是登录路由是在 router.js 中定义的,我无法找出一种方法来访问 rails 控制器中的 vue 路由。

class MyAccountController < ApplicationController
  before_action :authenticate_user!
  before_action :require_user

  private

  def require_user
    head(401) unless user_signed_in?
  end

  def authenticate_user
   if user_signed_in?
      super
    else
      redirect_to 'sign-in'
    end
  end   
end

路由器.js

const SessionsVue = () => import('views/sessions/new.vue')

const routes = [
 { 'path': '/sign-in', component: SessionsVue, meta: { requiresAuth: true } }
]

您无法在 Rails 控制器中访问 Vue 路由。 Vue 代码只是运行在浏览器中的 JavaScript 代码,通过 HTTP 请求和响应与 Rails 控制器通信。

从这里开始,完全取决于您如何选择以某种方式从控制器到浏览器中运行的 JS 进行通信。

你没有很多选择:

  1. 响应状态
  2. 响应头
  3. 响应体

响应状态对应于预定义的消息 有一种状态非常适合您:401 未经授权。 你可以

head :unauthorized

从一个动作并以某种方式检查 Vue 中的响应状态。

响应头和正文没有太大区别:标题总是传输一个键/值表,对于正文你可以传递任何字符串,但大多数情况下,对于 Vue,你会选择一个带有 JSON 的字符串,它是一个键/值表以及。

你可以通过一个

{ errors: ["Unauthorized"], ok: false }

并以某种方式在 Vue 中检查这些值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM