登录并在主页注册

时间:2014-09-30 20:46:52

标签: ruby-on-rails ruby authentication devise

我最近开始使用Ruby on Rails并使用Devise gem进行身份验证。当我开始尝试使用Devise Gem的新应用程序时,我工作得很好。但是,我正在使用的模板在主页上同时具有登录和注册表单。由于Devise创建了两个新视图,我不需要它们,我将不得不将这两个视图代码移动到我的home.html.erb文件中。

我遇到的问题是,在关注these steps之后,表单已创建,我填写用户名和密码,但按下提交按钮绝对没有任何意义。此外,在提交底部下创建了三个链接;登录,注册和忘记密码,将我重定向到Devise创建的页面,我试图避免使用相同的页面。

我看过很多地方,但没有运气。我有一周的RoR经验和两天的​​Devise Gem经验,所以我必须做一些荒谬的愚蠢行为。有帮助吗?

以下是我复制到home.html.erb文件的登录表单

    <%= form_for("user", :url => user_session_path) do |f| %>
    <div><%= f.label :email %><br />
    <%= f.email_field :email, :autofocus => true %></div>
    <div><%= f.label :password %><br />
    <%= f.password_field :password %></div>
    <% if devise_mapping.rememberable? -%>
    <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
    <% end -%>
    <div><%= f.submit "Sign in" %></div>
    <% end %>
    <%= render "devise/shared/links" %>

这是我的应用程序帮助文件:

module ApplicationHelper
  def resource_name
    :user
  end

  def resource
    @resource ||= User.new
  end

  def devise_mapping
    @devise_mapping ||= Devise.mappings[:user]
  end

end

和我的config / routes.rb文件:

  devise_for :users
  root 'pages#home'

编辑推荐routes.rb

  get "pages/home"
  devise_for :users

  devise_scope :users do
  get "pages/home", :to => "devise/sessions#new"
  post "/users/sign_in", :to => "devise/sessions#create", :as => :sign_in
  end

仍然没有结果。

1 个答案:

答案 0 :(得分:0)

不确定您的路线是如何设置的,但如果您想要显示自定义登录/注册视图并让它指向适当的位置,您需要确保更改设计路线的范围并将它们引导到您的自定义视图/路线。

例如,如果您想更改您的注册后路线(点击提交后),您可能会遇到以下情况:

devise_scope :user do
  get "/home", :to => "devise/sessions#new", :as => :home 
  post "/users/sign_up", :to => "devise/sessions#create", :as => :sign_up
end

我只是为你的目的编写了名称间距,但可能会有所不同。

值得一看的是Devise文档,它更详细地描述了如何更改默认登录和注册路由here

希望这会有所帮助。

修改

在进一步研究之后,尽管上面的信息对您有所帮助,但我认为您的问题实际上可能是您缺少:用户在form_for的第一行。试着这样做:

<%= form_for(:user, :url => user_session_path(:user)) do |f| %>

这就是我在上面提供的链接中显示的内容。