Rails 3 - Devise Зарегистрируйтесь и войдите вместе (несколько перенаправлений) - PullRequest
3 голосов
/ 27 января 2012

Я пытаюсь настроить страницу регистрации и входа в том же виде и в корневом URL-адресе.

Я сделал это, изменив представление пользователей / сеансов / нового (создание сгенерированного представления)поставить там 2 формы (Зарегистрироваться и войти).

Пока все хорошо, но у меня есть 2 проблемы:

Сначала, когда я пытаюсь зарегистрироваться и у меня есть недействительные данные, он перенаправляет меня на mywebapp / users, в то время как он должен перенаправлять на ту же страницу mywebapp / (root_path).

Во-вторых, если я пытаюсь войти, он успешно это делает и перенаправляет на правильный URL(также root_path), но он продолжает пытаться перенаправить его снова и снова, и я получаю сообщение об ошибке "Слишком много перенаправлений на http://localhost...".

Мои маршруты.rb:

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

Мои пользователи / сеансы / 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 частичный пока просто пустой вид.

Заранее спасибо.

1 Ответ

1 голос
/ 18 августа 2013

Первая проблема : Пожалуйста, используйте команду rails generate devise:views, которая создаст для вас разработанные виды в папке views / devise ( настройка представлений ).Вы можете поставить частичное отображение в представлениях:

views/devise/registrations/new.html.erb (регистрация)

и

views/devise/sessions/new.html.erb (вход).

Вторая проблема : Вы устанавливаете root_path на devise / session # new, и если вы входите в систему правильно, попытайтесь перенаправить на root_path снова и снова.Вам нужно установить какой-то другой root_path, и если вы хотите запретить доступ для не прошедших проверку пользователей, вы можете просто добавить фильтр в контроллер ( Разработка документации ) и перенаправить этих пользователей для аутентификации страницы для вас:

before_action :authenticate_user! (рельсы 3) или before_filter :authenticate_user! (рельсы 3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...