我正在尝试在同一视图和根网址设置注册和登录页面。
我通过更改用户/会话/新视图(设计生成的视图)来实现此目的,以便在其中放入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现在只是一个空视图。
提前致谢。
答案 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)