Rails:" link_to"用于注销和删除无响应的会话

时间:2015-10-28 19:15:59

标签: ruby-on-rails angularjs

我有一个应用程序,允许用户在注册/登录后查看博客文章"并将id保存在session[:user_id]中。

我遇到的问题是" link_to"一旦它们进入就退出的方法。在浏览器中,当我将鼠标悬停在" Logout"链接,它甚至没有表明它是一个链接,点击它什么都不做。

index.hmtl.erb:controller =>博客

<div ng-controller="BlogController">



  <div class="container-fluid">
    <div class="row text-center">
      <div class="col-xs-12 col-sm-12">
        <h4 class="user_session_signedInAs_txt">
          Signed in as:
          <span class="user_session_email"><%= session[:email]%></span>
        </h4>
        <h4>
          <%= link_to('Logout', {:controller => "users", :action => 'logout'}, :method => :delete, class: "blog_home_logout" ) %>
        </h4>
        <h4 class="search_blogs_heading">Search Blogs</h4>
      </div>
      <div class="col-sm-2"></div>
      <div class="col-sm-8">
        <h6 class="search_blogs_label">Enter "title" or "date"</h6>
        <input type="text" class="search_blogs_input" ng-model="search_blogs" placeholder=" Title or Date" autofocus>
      </div>
    </div>
    <div class="row">
      <div class="col-sm-2"></div>
      <div class="col-xs-12 col-sm-8">
      <div class="blog_search_div" ng-repeat="blog in blogs | filter: search_blogs | xFutureDates | limitTo: 15" ng-show="search_blogs">
        <br>
        <br>
        <a href="/blog_page?date={{blog.date}}">
          <p class="blog_search_date">{{blog.date}}</p>
          <p class="blog_search_title">{{blog.title}}</p>
        </a>
      </div>
    </div>
    </div>
    </div>

  <div class="container-fluid">
    <div class="row">
      <img class="spa_room_image" src="/assets/SpaTreatmentRoom.jpg">
    </div>
  </div>



  <div class="container-fluid">
    <div class="row text-center">
      <h4 class="recent_blogs_heading">Recent Blogs</h4>
    </div>
    <div class="row">
      <div class="col-xs-12">
        <div ng-repeat="blog in blogs | recentMonths | limitTo:10">
          <a href="/blog_page?date={{blog.date}}">
            <p class="blog_recentBlogs_date">{{blog.date}}</p>
            <p class="blog_recentBlogs_title">{{blog.title}}</p>
            <p class="blog_recentBlogs_description">{{blog.description.trunc(140)}}Read More</p>
          </a>
        </div>
      </div>
    </div>
  </div>



<div class="container-fluid blogs_index">
      <div class="row text-center">
      <h4 class="blog_index_heading">Recent Blogs</h4>
    </div>
    <div class="row text-center">
      <div class="col-xs-12">
        <div ng-repeat="blog in blogs | recentMonths | limitTo:10">
          <a href="/blog_page?date={{blog.date}}">
            <h6 class="archives_index_blog_title">{{blog.title}}</h6>
          </a>
        </div>
      </div>
    </div>
  <div class="row text-center">
      <h4 class="blog_index_heading">Categories</h4>
  </div>
  <div class="row text-center">
    <div class="col-xs-12 col-sm-12">
      <div class="blog_category_div">
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Body Contouring'">Body Contouring</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Breast Reduction Liposuction'">Breast Reduction Liposuction</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Breast Reduction Surgery'">Breast Reduction Surgery</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Cosmetic Surgery'">Cosmetic Surgery</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Cosmetic Surgery Procedures'">Cosmetic Surgery Procedures</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Facelift'">Facelift</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Fat Grafting'">Fat Grafting</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Gynecomastia'">Gynecomastia</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Infographics'">Infographics</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Laser Lift'">Laser Lift</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Laser Liposuction'">Laser Liposuction</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Liposuction'">Liposuction</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Liposuction Surgery'">Male Breast Reduction</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Neck Liposuction'">Neck Liposuction</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Non-Invasive Procedures'">Non-Invasive Procedures</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Plastic Surgeons'">Plastic Surgeons</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Plastic Surgery'">Plastic Surgery</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='SmartLipo'">SmartLipo</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='SmartLipo Triplex'">SmartLipo Triplex</a></h6>
      <h6 class="blog_category_links"><a href="/blog_category_archive?category='Weight Loss'">Weight Loss</a></h6>
    </div>
    </div>
  </div>
</div>


<div class="container-fluid blog_index">
  <div class="row text-center">
      <h4 class="blog_index_heading">Archives</h4>
  </div>
  <div class="row text-center">
    <div class="col-xs-12">
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='October 2015'">October 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='September 2015'">September 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='August 2015'">August 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='July 2015'">July 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='June 2015'">June 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='May 2015'">May 2015</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='October 2014'">October 2014</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='September 2014'">September 2014</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='August 2014'">August 2014</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='July 2014'">July 2014</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='June 2014'">June 2014</a></h6>
      <h6 class="blog_months_links"><a href="/blog_month_archive?month_year='May 2014'">May 2014</a></h6>
    </div>
  </div>
</div>
</div>




</div>

Controller users_controller.rb

class UsersController < ApplicationController

  ... 



  def logout
    session[:user_id] = nil
    session[:email] = nil
    flash[:notice] = "Logged out."
    redirect_to(:action => "login" )
  end


    private
  def message_params
    return params.require(:user).permit( :email, :password, :password_confirmation )
  end

end

路线

Rails.application.routes.draw do
  ...

  # Users login/signup
  get '/blog_signup' => 'users#new'
  post 'blog_signup' => 'users#create'
  get '/blog_login' => 'users#login'
  post 'blog_attempt_login' => 'users#attempt_login'
  get '/user/blog_logout' => 'users#logout'

  # User_Admins login/signup
  get '/admin_login' => 'user_admins#login'
  post 'admin_attempt_login' => 'user_admins#attempt_login'
  get '/admin_logout' => 'user_admins#logout'

end

通过DOM查看源视图&#34; link_to&#34;

<a class="blog_home_logout" rel="nofollow" data-method="delete" href="/user/blog_logout">Logout</a>

我已更改路线以匹配a标记

1 个答案:

答案 0 :(得分:1)

这可能不是原因,但这是你需要解决的问题:

有些浏览器和某些代理做了预取&#34;他们称所有&#34;正常&#34;页面上的链接并缓存结果,以便他们在您点击它们时更快地做出响应。他们可能会调用注销链接!因此,您的注销链接不应使用GET方法。

您需要将注销链接从GET更改为不同的(POST或更好的DELETE),当然还有相应的路径。

<%= link_to('Logout', {:controller => "users", :action => 'logout'}, :method => :delete) %>

该链接位于div内,且ng-controller属性。如果您的网页上有一个角度应用,那么它将使用javascript更改链接。

注销和注销通常在SessionsController中完成,而不是在UsersController中完成,因为您没有对用户模型执行某些操作。 (但这更像是一种风格问题。)