如何防止错误的重定向登录Devise?

时间:2013-05-16 12:14:08

标签: ruby-on-rails redirect login devise

大家好,这可能很简单,但我无法在任何地方找到答案。 我在我的Rails应用程序上有一个欢迎页面,当您使用设计登录时,我想将用户从该页面直接重定向到帖子页面,这对我正在使用的代码工作正常。唯一的问题是我无法在您登录后再次访问该页面,因为它显然仍然会重定向。有没有人知道登录时是否有重定向的方法但是如果可能的话仍然允许你返回欢迎页面?

class WelcomeController < ApplicationController
  def index
    if user_signed_in?
      redirect_to :controller=>'posts', :action=>'index'
    end
  end
end

class PostsController < ApplicationController
  before_filter :authenticate_user!

  # GET /statuses
  # GET /statuses.json
  def index
    @posts = Post.order('id DESC').paginate(:per_page => 5,:page => params[:page])

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end
end

感谢。

3 个答案:

答案 0 :(得分:1)

最简单的方法在devise https://github.com/plataformatec/devise/wiki/How-To%3A-Redirect-to-a-specific-page-on-successful-sign-in-and-sign-out

的文档中有所描述

只需定义类似于application_controller.rb

的内容即可
class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    posts_path
  end
end

答案 1 :(得分:0)

设计

before_filter :authenticate_user 

检查用户是否已登录,并且应该执行您想要的操作。您需要在PostsController中设置此过滤器。请参阅文档:https://github.com/plataformatec/devise#controller-filters-and-helpers

答案 2 :(得分:0)

将signed_in用户重定向到Posts页面是完全错误的方法。

Devise有很多关于如何做到这一点的文档 - https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-on-successful-sign-in

您应在ApplicationController中添加以下内容:

def after_sign_in_path_for(resource)
  stored_location_for(resource) || posts_path
end