我已将rails 4应用程序更新到Rails 5,但我无法在rails 5上设置经过身份验证和未经身份验证的路由。
unauthenticated do
root to: "home#index", as: :unauthenticated_root
end
authenticated :user do
root :to => "home#dashboard"
end
但是如何设置rails 5应用程序
答案 0 :(得分:0)
我认为您找到的解决方案是user_signed_in
然后重定向到home#dashboard
其他"home#index"
,对吗?然后
首先,请参阅此解决方案,如果不起作用,请说明How To: Define a different root route for logged in out users,然后转到下面。
的routes.rb
root to: "home#index", as: :unauthenticated_root
get 'dashboard', to: "home#dashboard" #=> dashboard_path
在您的索引操作上使用如下
def index
redirect_to dashboard_path if user_signed_in?
end
使用控制器顶部
before_action :authenticate_user!, except: [:index]
它将被设置为需要dashboard
的身份验证以及index
以外的其他操作,您也可以像这样使用
before_action :authenticate_user!, only: [:dashboard]
将仅设置dashboard
操作的身份验证。
user_signed_in?
和authenticate_user!
是回调方法,如果你使用devise然后它默认存在,如果你没有使用devise那么我相信你有自己的回调方法只是替换它。
评论后完全格式化
class HomeController < ApplicationController
before_action :authenticate_user!, except: [:index]
def index
redirect_to dashboard_path if user_signed_in?
end
def dashboard
end
def other_action
end
.....
end
耙路后
unauthenticated_root GET / home#index
dashboard GET /dashboard(.:format) home#dashboard
<强> Update after comment 强>
如果您有ajax登录信息,请按照此SO question
进行操作您应该覆盖设计创建方法并通过正确呈现视图来管理其中的情况,否则,正如您在设计的默认创建方法中所看到的,如果未执行会话创建,它将只重定向您渲染create.js
您可以在控制器文件夹中覆盖设计控制器并命名为registrations_controller.rb
,如下所示
class RegistrationsController < Devise::RegistrationsController
# POST /resource
def create
super
end
end
路线看起来像
devise_for :users, :controllers => {:registrations => 'registrations'}
希望有所帮助
答案 1 :(得分:0)
这是使用路线约束的绝佳应用程序。请考虑以下内容:
# routes.rb
scope module: 'authenticated', constraints: AuthConstraint.new { |user| user.present? } do
# Management dashboard
root 'dashboards#index'
end
root 'home#index'
约束在app/constraints/auth_constraint.rb
文件中定义,可以根据需要进行配置。例如。
# app/constraints/auth_constraint.rb
class AuthConstraint
def initialize(&block)
@block = block || ->(_) { true }
end
def matches?(req)
user = current_user(req)
user.present? && @block.call(user)
end
def current_user(req)
User.find_by_id(session[:user_id])
end
end
这是一种基于任何所需变量(角色,身份验证等)定义路由访问权限的灵活方法
以下是Rails文档中约束的链接:https://guides.rubyonrails.org/routing.html#specifying-constraints