Ruby on rails 身份验证后不需要的重定向
我们有一个表格,可以在我们的视图/restaurants/show.html.erb中为a中的某个餐厅提交评级。我们只希望登录用户创建新的评级。我们把 在\u筛选器之前:需要登录,:only=>[:new,:create] (但我们也只尝试在RatingsController上使用“:create”)。如果我们在输入评级详细信息后单击“提交”按钮,系统会提示我们登录(这是我们想要的)。在填写用户名和密码并提交登录表单后,我们会被重定向回e。g/餐厅/36/收视率,但我们希望被重新定位到我们来自的地方-e。g/餐厅/36/。我们尝试将_重定向到(:back),但这会将我们重定向回登录表单。此外,新的评级不会保存到数据库中 知道我们如何更改重定向以及如何确保保存评级吗Ruby on rails 身份验证后不需要的重定向,ruby-on-rails,restful-authentication,Ruby On Rails,Restful Authentication,我们有一个表格,可以在我们的视图/restaurants/show.html.erb中为a中的某个餐厅提交评级。我们只希望登录用户创建新的评级。我们把 在\u筛选器之前:需要登录,:only=>[:new,:create] (但我们也只尝试在RatingsController上使用“:create”)。如果我们在输入评级详细信息后单击“提交”按钮,系统会提示我们登录(这是我们想要的)。在填写用户名和密码并提交登录表单后,我们会被重定向回e。g/餐厅/36/收视率,但我们希望被重新定位到我们来自的
谢谢 免责声明:我不使用
restful身份验证。(如果你有选择的话,你可以查看一下authlogic
——如果你想要介绍的话,这里有一个选项。)即使如此,在会话中存储“back”值仍然可以。以下是我在这种情况下所做的:
# app/controllers/application.rb
before_filter :authorize
protected
# Override in controller classes that should NOT require authentication (such as logging in, by definition)
def require_login?
return true
end
private
def authorize
if require_login? && current_user.nil?
session['return_to'] = request.request_uri
redirect_to login_url
return false
end
end
# app/controllers/user_sessions_controller.rb
def create
# [...]
if @user_session.save
flash[:notice] = 'Successfully logged in.'
if session['return_to'].nil?
redirect_to root_url
else
redirect_to session['return_to']
end
else
render :action => 'new'
end
end
# app/controllers/users_controller.rb
# Just as an example:
def require_login?
return case action_name
when 'new'
false
when 'create'
false
else
true
end
end
我的应用程序几乎需要每一个操作来要求身份验证,这就是为什么我有require\u login?
returntrue
。我认为你可以根据自己的需要调整会话['return\u to']
想法
我想我从这篇文章中得到了部分想法:免责声明:我不使用restful身份验证。(如果你有选择的话,你可以查看一下authlogic
——如果你想要介绍的话,这里有一个选项。)即使如此,在会话中存储“back”值仍然可以。以下是我在这种情况下所做的:
# app/controllers/application.rb
before_filter :authorize
protected
# Override in controller classes that should NOT require authentication (such as logging in, by definition)
def require_login?
return true
end
private
def authorize
if require_login? && current_user.nil?
session['return_to'] = request.request_uri
redirect_to login_url
return false
end
end
# app/controllers/user_sessions_controller.rb
def create
# [...]
if @user_session.save
flash[:notice] = 'Successfully logged in.'
if session['return_to'].nil?
redirect_to root_url
else
redirect_to session['return_to']
end
else
render :action => 'new'
end
end
# app/controllers/users_controller.rb
# Just as an example:
def require_login?
return case action_name
when 'new'
false
when 'create'
false
else
true
end
end
我的应用程序几乎需要每一个操作来要求身份验证,这就是为什么我有require\u login?
returntrue
。我认为你可以根据自己的需要调整会话['return\u to']
想法
我想我从这篇文章中得到了一部分想法:你们有没有想过?你们有没有想过?