【问题标题】:Unwanted redirection after authentication身份验证后不需要的重定向
【发布时间】:2011-02-18 16:00:32
【问题描述】:

我们有一个表单可以在我们的views/restaurants/show.html.erb 中提交某个餐厅的评分。我们只希望登录用户创建新评级。我们把

before_filter :login_required, :only => [ :new, :create ]

(但我们也只尝试了“:create”)在我们的 RatingsController 之上。如果我们在输入评分详细信息后单击提交按钮,系统会提示我们登录(这是我们想要的)。填写用户名和密码并提交登录表单后,我们将被重定向回 e。 G。 /restaurants/36/ratings,但我们希望被重定向回我们来自的地方 - e。 G。 /餐厅/36/。我们尝试了redirect_to(:back),但这会将我们重定向回登录表单。新评级也不会保存到数据库中。

知道如何更改重定向以及如何确保保存评分吗?

谢谢!

【问题讨论】:

  • 你们有没有想过这个问题?

标签: ruby-on-rails restful-authentication


【解决方案1】:

免责声明:我不使用restful-authentication。 (如果您有选择,您可以查看authlogic - 如果您想要介绍,可以查看Railscast about it。)即便如此,在会话中存储“返回”值应该仍然有效。以下是我在我的情况下所做的:

# 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_login? 返回true 的原因。我认为您可以根据自己的需要调整 session['return_to'] 想法。

我想我从这篇文章中得到了这个想法的一部分:http://www.urubatan.info/2007/10/a-very-simple-login-example-with-rails/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2019-07-11
    • 2016-05-13
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多