禁用设计sign_in重定向

时间:2014-04-07 19:00:26

标签: ruby-on-rails ruby ruby-on-rails-3 api devise

我正在我的rails 3.2应用程序之上构建一个API。

当我第一次使用正确的参数登录api/login时,效果很好。 但是当我再次尝试重复完全相同的操作时,我已经登录了它,它会将我的应用程序主页的html呈现给我。我想这是因为我的应用程序设置为在登录后重定向到此页面。我可以修改我的api/sessions_controller.rb,使其不会重定向到任何内容:

class SessionsController < Devise::SessionsController
  prepend_before_filter :require_no_authentication, :only => [:create]
  before_filter :ensure_params_exist, :only => [:create]

  respond_to :json

  def create
    build_resource
    resource = User.find_for_database_authentication(login: params[:login])
    return invalid_login_attempt unless resource

    if resource.valid_password?(params[:password])
      sign_in("user", resource) # I would like to disable redirection here 
      generate_authentication_token(resource)
      render :json => {success: true, ...}
      return
    end

    invalid_login_attempt
  end

修改

    def invalid_login_attempt
      warden.custom_failure!
      render :json=> {success: false, message: "Error with your login or password" + params.inspect}, :status=>401
    end

2 个答案:

答案 0 :(得分:1)

我要回答我自己的问题,因为我找到了一种方法:

#sessions_controller.rb
def after_sign_in_path_for(resource)
  sign_in_url = url_for(:action => 'show_info', :controller => 'sessions', :only_path => false, :protocol => 'http')
end

然后让sessions#show_info返回create函数返回的完全相同的信息。不确定这是否是最佳方式

答案 1 :(得分:0)

这对你有什么帮助吗? https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in 此外,登录后不在任何地方重定向不是一个非常健康的工作流程。在登录的会话中,您无法访问登录屏幕以输入凭据。您只能在退出后联系到它。