Rails 3 - 设计注册并一起登录视图(多个重定向)

时间:2012-01-26 21:11:20

标签: ruby-on-rails devise

我正在尝试在同一视图和根网址设置注册和登录页面。

我通过更改用户/会话/新视图(设计生成的视图)来实现此目的,以便在其中放入2个表单(注册和登录)。

到目前为止一切顺利,但我有两个问题:

首先,当我尝试注册并拥有无效数据时,它会将我重定向到mywebapp / users,而它应该重定向到同一页面mywebapp /(root_path)。

其次,如果我尝试登录,它会成功执行此操作,并重定向到正确的URL(root_path也),但它会一直尝试重复定向到它,并且我收到错误“Too many redirects to http://localhost ...“。

我的routes.rb:

devise_for :users do
  root :to => "devise/sessions#new"
end

我的用户/ sessions / new.rb:

<% if user_signed_in? %>
  <%= render 'users/sessions/home' %>
<% else %>
  <%= render 'users/sessions/login' %>
<% end %>

我的_login.rb部分:

 <h1>Index</h1>
 <hr/>

 <h2>Log in</h2>
 <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
   <table>
     <tr>
       <td><%= f.label :email %></td>
       <td><%= f.email_field :email %></td>
     </tr>
     <tr>
       <td><%= f.label :password %></td>
       <td><%= f.password_field :password %></td>
     </tr>
   </table>

   <% if devise_mapping.rememberable? %>
     <%= f.check_box :remember_me %> <%= f.label :remember_me %></div>
   <% end %>

   <div><%= f.submit "Log in" %></div>
<% end %>

<% if devise_mapping.recoverable? %>
  <%= link_to "Forgot your password?", new_password_path(resource_name) %><br/>
<% end %>

<hr/>

<h2>Sign up</h2>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>

  <table>
    <tr>
      <td><%= f.label :first_name %></td>
      <td><%= f.text_field :first_name %></td>
    </tr>
    <tr>
      <td><%= f.label :last_name %></td>
      <td><%= f.text_field :last_name %></td>
    </tr>
    <tr>
      <td><%= f.label :email %></td>
      <td><%= f.email_field :email %></td>
    </tr>
    <tr>
      <td><%= f.label :password %></td>
      <td><%= f.password_field :password %></td>
    </tr>
    <tr>
      <td><%= f.label :password_confirmation %></td>
      <td><%= f.password_field :password_confirmation %></td>
    </tr>
  </table>

  <div><%= f.submit "Sign up" %></div>
<% end %>

我的_home partial现在只是一个空视图。

提前致谢。

1 个答案:

答案 0 :(得分:1)

第一个问题:请使用rails generate devise:views命令,该命令将在views / devise文件夹(configuring views)中为您创建设计视图。您可以在视图中放置渲染部分:

views/devise/registrations/new.html.erb(注册)

views/devise/sessions/new.html.erb(登录)。

第二个问题:您将root_path设置为devise / sessions #new,如果您签署了正确的设备,请尝试一次又一次地重定向到root_path。您需要设置另一个root_path,如果您想拒绝未经过身份验证的用户访问,您只需将过滤器添加到控制器(Devise documentation)并设计重定向这些用户为您验证页面:

before_action :authenticate_user!(Rails 3)或before_filter :authenticate_user!(Rails 3)