我有一个Ruby on Rails Web应用程序,用户需要提供他的昵称和密码才能注册。注册成功后,用户将被重定向到编辑页面,在那里他应该输入他的电子邮件。
用例需要始终将用户重定向到编辑页面,直到他提交了有效的电子邮件地址。但是,在当前状态下,用户可以单击任何菜单项,然后进入相应的页面。如何在单击菜单链接时阻止此行为并将用户重定向回编辑页面?
答案 0 :(得分:2)
您可以在before_action
中创建ApplicationController
,检查用户是否已登录并提交了他的电子邮件,如下所示:
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
答案 1 :(得分:1)
在官方文档中进行了一些挖掘,并发现这一点似乎符合您的需求:
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
等,但原则是一样的。