登录后设计不路由

时间:2014-09-17 03:55:14

标签: ruby-on-rails ruby-on-rails-4 devise routes

由于某种原因,Devise在登录索引页面(todo_lists_path)后停止了路由。我不知道发生了什么。有一件事是我实现了茧,但只在我的_form中实现了todo_lists。会发生的事情是它只是回到登录页面而没有在

中签名

我确实在控制台中创建了一个虚拟用户,并在此处尝试登录时呈现的内容:

Started GET "/users/sign_in?utf8=%E2%9C%93&authenticity_token=taJFijjoRwVbWTZIyJtn1q7xzPvg5qXPeNQ8Ths1lVQ%3D&user%5Bemail%5D=member%40example.com&user%5Bpassword%5D=[FILTERED]&user%5Bremember_me%5D=0&commit=Log+in" for 127.0.0.1 at 2014-09-16 22:47:16 -0500
Processing by Devise::SessionsController#new as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"taJFijjoRwVbWTZIyJtn1q7xzPvg5qXPeNQ8Ths1lVQ=", "user"=>{"email"=>"member@example.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Log in"}
  Rendered devise/shared/_links.erb (0.9ms)
  Rendered devise/sessions/new.html.erb within layouts/application (5.1ms)
Completed 200 OK in 669ms (Views: 527.4ms | ActiveRecord: 0.0ms)


class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  before_action :configure_permitted_parameters, if: :devise_controller?

  def after_sign_in_path_for(resource)
    todo_lists_path
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :name
  end
end


Rails.application.routes.draw do

  get 'welcome/index'

  get 'welcome/about'

  devise_for :users
  resources :todo_lists do 
    resources :todo_items
  end
  root to: 'welcome#index'

end

application.html.erb

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title><%= content_for?(:title) ? yield(:title) : "Blocitoff" %></title>

    <%= stylesheet_link_tag    "application" %>
    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script>
    <%= javascript_include_tag "vendor/modernizr" %>
    <%= javascript_include_tag "application" %>

    <%= csrf_meta_tags %>
  </head>

  <body>
    <div class="contain-to-grid sticky">
      <nav class="top-bar" data-topbar role="navigation" data-options="sticky_on: large">
        <ul class="title-area">
          <li class="name"> 
            <h1><%= link_to 'Blocitoff', todo_lists_path %></h1>
          </li>
        </ul>
      <section class="top-bar-section">
        <!-- Right Nav Section -->
        <%if current_user %>
          <ul class="right">
            <li><%= link_to (current_user.name || current_user.email)%></li>
            <li><%= link_to "Sign Out", destroy_user_session_path, method: :delete%></li>
          </ul>
        <% else %>
        <ul class="right">
          <li><%= link_to "Sign In",new_user_session_path %></li>
          <li><%= link_to "Sign Up", new_user_registration_path %></li>
        </ul>
      </section>
      <% end %>
      </nav>
    </div>

    <%= yield %>
    <%= javascript_include_tag "application" %>
  </body>

登录

<h2 class="text-center">Log in</h2>
<form>
    <div class="row">
        <div class="large-12 columns">
            <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
              <div>
                <%= f.label :email %>
                <%= f.email_field :email, autofocus: true %>
            </div>
        </div>
    </div>

    <div class="row">
      <div class="large-12 columns">
        <%= f.label :password %>
        <%= f.password_field :password, autocomplete: "off" %>
      </div>
    </div>

    <div class="row">
        <div class="large-12 columns">
          <% if devise_mapping.rememberable? -%>
            <div><%= f.check_box :remember_me %> <%= f.label :remember_me %>
          <% end -%>

          <div class="row">
            <div class="large-12 columns">
                <%= f.submit "Log in", class: "button [tiny small large]"  %>
            </div>
          </div>
        <% end %>

        <%= render "devise/shared/links" %>
        </div>
    </div>
</form>

1 个答案:

答案 0 :(得分:2)

您的SignIn视图不正确。您已经拥有form_for,但您也使用了<form>代码,这是错误的。因为您没有methodaction,默认情况下会使用GET方法将表单数据发送到您当前的网址。

您应该更新您的观点,如下所示:

<h2 class="text-center">Log in</h2>
  <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %>
    <div class="row">
        <div class="large-12 columns">
              <div>
                <%= f.label :email %>
                <%= f.email_field :email, autofocus: true %>
            </div>
        </div>
    </div>

    <div class="row">
      <div class="large-12 columns">
        <%= f.label :password %>
        <%= f.password_field :password, autocomplete: "off" %>
      </div>
    </div>

    <div class="row">
        <div class="large-12 columns">
          <% if devise_mapping.rememberable? -%>
            <div><%= f.check_box :remember_me %> <%= f.label :remember_me %>
          <% end -%>

          <div class="row">
            <div class="large-12 columns">
                <%= f.submit "Log in", class: "button [tiny small large]"  %>
            </div>
          </div>


        <%= render "devise/shared/links" %>
        </div>
    </div>
<% end %>