设计路线仅使用自定义登录页面

时间:2012-06-14 17:48:03

标签: ruby-on-rails-3 devise

我在这里努力学习设计,似乎都创下了问题几乎一样多,许多问题上SO只是不够,我没有得到以下这些问题主题多大吸引力略有不同。

我有一个非常简单的应用程序。用户可以登录和注销(以及色器件“忘记密码”的东西已启用 - 我不会在这个时候关注它),这是的的。他们无法注册,除了更改密码外,他们无法编辑自己的个人资料,除登录和退出外,他们无法做任何事情。 (现在,将在命令行手动处理帐户创建。)

我非常希望用户可以登录的唯一页面是“/”(root_path)。我已经让它工作在你可以从“/”登录的地方,这很棒。我遇到的问题是,如果你在你的用户名/密码组合错误从root_path登录页面输入时,它会自动发送您的设计登录页面,继续尝试登录。我怎样才能让设计重定向登录失败时root_path?

以下是我的路线 - 它们可能不是最佳配置或正确配置,我希望有关修复它们的指示:

root to: "core_pages#splash"

devise_for :users, skip: [:sessions]
as :user do
  # get 'signin' => 'devise/sessions#new', as: :new_user_session
  post 'signin' => 'devise/sessions#create', as: :user_session
  delete 'signout' => 'devise/sessions#destroy', as: :destroy_user_session,
    via: Devise.mappings[:user].sign_out_via
end

match '/home' => 'core_pages#home'

请注意已注释掉的'get signin'行。系统没有这条线路,但令人惊讶的是(对我来说),“GET / signin”会产生HTTP 400(OK)响应,并呈现Devise登录模板。我希望它返回某种“无效请求”,或者只是默默地将用户重定向到root_path

在这些路线上运行rake routes会产生:

                root        /                              core_pages#splash
       user_password POST   /users/password(.:format)      devise/passwords#create
   new_user_password GET    /users/password/new(.:format)  devise/passwords#new
  edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                     PUT    /users/password(.:format)      devise/passwords#update
        user_session POST   /signin(.:format)              devise/sessions#create
destroy_user_session DELETE /signout(.:format)             devise/sessions#destroy
                home        /home(.:format)                core_pages#home

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以将root_path指向Devise Sessions控制器:“devise / sessions #new”(并将您的主视图移动到该页面)。此外,您可以在路线中添加此行。

get "/" => "devise/sessions#new", :as => :user_session

执行此操作时,如果登录失败,您将返回主页(现在位于devise / sessions / new)。

相关问题