2014-04-07 52 views
2

我在我的rails 3.2應用程序之上構建了一個API。禁用設計sign_in重定向

當我第一次使用正確的參數登錄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

什麼是'invalid_login_attempt'? –

+0

只是處理無效的參數 - 請參閱編輯 – titibouboul

+0

剛剛發現您從中取得這一點的要點。如果你沒有注意到,它已經超過2年了,所以它可能已經被寫入了比你正在使用的版本更老版本的Devise。你能澄清一下這個API的用途嗎?即,它是單頁應用程序的後端,還是設計爲由其他應用程序使用? –

回答

0

不這以什麼方式幫助你? https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in 另外,登錄後不在任何地方重定向不是一個非常健康的工作流程。在登錄的會話中,您不應該能夠登錄屏幕來輸入憑據。註銷後您只能訪問它。

+0

不是。我不想重定向,只需'登錄'用戶 – titibouboul

+0

您可以像在教程中一樣自己登錄: http://ruby.railstutorial.org/chapters/sign-in-sign-out#sec -signin_success 但是這不會涉及設計了 –

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函數將返回。不知道這是否是最好的方式