2015-08-24 52 views
3

新的鐵路。有一個問題。設計重置密碼。不要重定向,發回Ajax成功?

請求使用Devise更改密碼後,它想要重定向到某個路徑。我已重寫使用此路徑:

protected def after_sending_reset_password_instructions_path_for(resource_name) 
    root_path 
end 

然而,這的確是一個權宜之計,直到我弄清楚如何得到一個JSON對象傳遞迴,現在使用AJAX我忘記密碼的頁面。有沒有辦法在發送重置密碼指令而不是重定向之後,將JSON對象傳回致電的「忘記」頁面?

編輯:

新增PasswordsController和它是什麼樣子:

class Portal::PasswordsController < Devise::PasswordsController 
    def create 
    super 
    end 
end 

再次感謝。

回答

1

所以這就是我最終做的。

首先,我查看了設計源代碼,它似乎是硬編碼重定向(3.5.1)或返回到忘記密碼,如果電子郵件發送失敗。

所以,我認爲我自然會把JSON從Devise中剔除出去,然後就會吼出錯誤的樹。

所以我的解決辦法是模仿什麼做設計,以這樣的方式

class Portal::PasswordsController < Devise::PasswordsController 
    respond_to :json, only: [:create] 

    def create 
    user = User.send_reset_password_instructions(params.fetch(:user)) 

    if successfully_sent?(user) 
     render json: { data: "something" }, status: 200 
    else 
     render json: { data: "something bad" }, status: 400 
    end 
    end 
end 

這似乎仍然是如果成功更新數據庫和用戶記錄與令牌和日期信息。

當然,我不喜歡這樣做;我寧願開箱即可使用AJAX,但事實就是如此。

希望有所幫助。