我正在我的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
答案 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 此外,登录后不在任何地方重定向不是一个非常健康的工作流程。在登录的会话中,您无法访问登录屏幕以输入凭据。您只能在退出后联系到它。