我有一個Ruby on Rails Web應用程序,用戶需要提供他的暱稱和密碼進行註冊。成功註冊後,用戶被重定向到編輯頁面,在那裏他應該輸入他的電子郵件。如果電子郵件爲空,Rails總是重定向到編輯頁面
用例需要總是將用戶重定向到編輯頁面,直到他提交了有效的電子郵件地址。但是,在當前狀態下,用戶可以點擊任何菜單項並隨後進入相應的頁面。點擊菜單鏈接時,如何防止此行爲並將用戶重定向回編輯頁面?
我有一個Ruby on Rails Web應用程序,用戶需要提供他的暱稱和密碼進行註冊。成功註冊後,用戶被重定向到編輯頁面,在那裏他應該輸入他的電子郵件。如果電子郵件爲空,Rails總是重定向到編輯頁面
用例需要總是將用戶重定向到編輯頁面,直到他提交了有效的電子郵件地址。但是,在當前狀態下,用戶可以點擊任何菜單項並隨後進入相應的頁面。點擊菜單鏈接時,如何防止此行爲並將用戶重定向回編輯頁面?
您可以創建一個在您ApplicationController
其中檢查,如果用戶登錄並提交他的電子郵件,像這樣一個before_action
:
class ApplicationController < ActionController::Base
before_action :validate_email_confirmed
def validate_email_confirmed
return unless current_user
redirect_to user_edit_path unless current_user.email?
end
end
請記住,你要跳過此before_action
同時爲用戶編輯和更新操作,否則您將最終產生重定向循環。這是如何跳過現有before_action
爲具體行動:
class UsersController < ApplicationController
skip_before_action :validate_email_confirmed, only: [:edit, :update]
end
做了一些更多的挖掘,發現這個在官方文檔,似乎符合您的需求:
class ApplicationController < ActionController::Base
before_action LoginFilter
end
class LoginFilter
def self.before(controller)
unless controller.send(:logged_in?)
controller.flash[:error] = "You must be logged in to access this section"
controller.redirect_to controller.new_login_url
end
end
end
你當然不得不返工這一些,讓awaiting_email
或如此,但原則是一樣的。
你的答案是正確的,但馴Shlash的回答是更精確的,所以我接受了他。無論如何,謝謝你的幫助:) – lss
呃,你接受了我@Iss :) –