Ruby on rails RoR,Desive:登录的路由重定向到用户#显示
当我转到localhost:3000/users/sign#u in时,我会被重定向到users#show,并显示一个错误(因为没有当前用户),而不是登录页面。据我所知,这不应该发生,但事实确实如此。如果单击指向新用户会话路径的链接,或者直接键入URI,我都会被重定向 我已经查看了我的路由中的重复项,并清除了会话和缓存。老实说,整个设计界面是如此简单,我不知道还有什么要检查。这在早些时候起了作用,所以很明显有些东西已经改变了 还有什么可能出错 耙路径Ruby on rails RoR,Desive:登录的路由重定向到用户#显示,ruby-on-rails,ruby-on-rails-4,devise,Ruby On Rails,Ruby On Rails 4,Devise,当我转到localhost:3000/users/sign#u in时,我会被重定向到users#show,并显示一个错误(因为没有当前用户),而不是登录页面。据我所知,这不应该发生,但事实确实如此。如果单击指向新用户会话路径的链接,或者直接键入URI,我都会被重定向 我已经查看了我的路由中的重复项,并清除了会话和缓存。老实说,整个设计界面是如此简单,我不知道还有什么要检查。这在早些时候起了作用,所以很明显有些东西已经改变了 还有什么可能出错 耙路径 # output from rake:rou
# output from rake:routes
# there are no other routes for this GET path
new_user_session GET /users/sign_in(.:format) devise/sessions#new
Routes.rb
#config/routes.rb
resources :users
devise_for :users
控制器
#app/controllers/user_controller.rb
before_action :confirm_signed_in
def confirm_signed_in
unless user_signed_in?
initiate_return_to_last_successful
flash.now[:notice] = 'Please sign in.'
redirect_to new_user_session_path
end
end
注意:我最近试图修改Desive registrations controller创建操作。我不确定这是否是原因,但我已经退出了所有与之相关的更改(我相信。检查了三次)。您需要切换这两行。文件顶部的路由优先,因此问题在于资源使用路由模式匹配 此路由由
resources
方法生成,匹配任何格式为/users/anything\u can\u go\u here
的路由,替换:id
的部分将在控制器中作为参数[:id]
可用
GET '/users/:id' => 'users#show'
Desive生成的此路由需要放置在对资源:用户的调用上方,以便在Rails眼中具有优先权
GET 'users/sign_in' => 'users#sign_in'
要解决此问题,请执行以下操作:
resources :users
devise_for :users
应该是
devise_for :users
resources :users
要了解更多关于RubyonRails中路由的信息,请查看。Desive确实有一个before\u操作,authenticate\u user代码>可以替换您的确认\u登录
。谢谢因为我想修改它,所以我自己做了。就是这样,这就解释了。非常感谢。