1

我正在尝试学习设计,并且似乎遇到了一个与 SO 上的许多问题几乎相同的问题,但只是略有不同,以至于我在这些问题的线程中没有得到太大的牵引力。

我有一个非常简单的应用程序。用户可以登录和注销(并且启用了“忘记密码”的设计 - 我现在不关心它)就是这样。他们不能注册,不能编辑他们的个人资料,只能更改密码,除了登录和退出之外,他们不能做任何事情。(目前,帐户创建将在命令行中手动处理。)

我非常希望用户可以登录的唯一页面是“/”(root_path)。我已经让它工作了,你可以从“/”登录,这很棒。我遇到的问题是,如果您从 root_path 登录页面错误地输入了您的用户/密码组合,它会自动将您发送到 Devise 登录页面以继续尝试登录。如何使 Devise 重定向到 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”会导致 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

谢谢!

4

1 回答 1

1

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

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

这样做,当登录不成功时,您将返回主页(现在位于 devise/sessions/new 上)。

于 2012-06-16T03:12:17.030 回答