Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 身份验证后不需要的重定向_Ruby On Rails_Restful Authentication - Fatal编程技术网

Ruby on rails 身份验证后不需要的重定向

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/收视率,但我们希望被重新定位到我们来自的

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

在\u筛选器之前:需要登录,:only=>[:new,:create]

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

知道我们如何更改重定向以及如何确保保存评级吗


谢谢

免责声明:我不使用
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?
return
true
。我认为你可以根据自己的需要调整
会话['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?
return
true
。我认为你可以根据自己的需要调整
会话['return\u to']
想法


我想我从这篇文章中得到了一部分想法:

你们有没有想过?你们有没有想过?