繁体   English   中英

Rails:登录后无法重定向到上一页

[英]Rails: redirect to previous page after login doesn't work

我试图重定向到单击登录的页面,但是登录后不会重定向到上一页,而是停留在登录页面上(尽管用户已经登录)。 这是我的代码:

session_helper.rb

module SessionsHelper

def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
end


def redirect_back_or(default)
    redirect_to(session[:return_to] || default)
    session.delete(:return_to)
end

def store_location
    session[:return_to] = request.fullpath
end
end

sessions_controller.rb

class SessionsController < ApplicationController
  include SessionsHelper
  def new
  end
  def create
    user = User.find_by_username(params[:session][:username])
    if user && user.authenticate(params[:session][:password])   
      cookies.permanent[:remember_token] = user.remember_token
      #redirect_to root_url,:notice => "Logged in!"
        redirect_back_or user
    else
      flash[:error] = 'Invalid email/password combination' # Not quite right!
      render 'new'
    end
  end
  def destroy
    cookies.delete(:remember_token)
    #session[:user_id] = nil
    redirect_to root_url, :notice => "Logged out!"
  end
end

我也试图在sessions_controller.rb中写create函数

redirect_to request.referer

但这不起作用。

我想念什么吗?

谢谢你的帮助!

问题发生在store_location

尽管您没有说过问题,但我想您可能将此方法放在了before_filter 因此,无论是GET还是POST或其他请求,该请求都首先到达此过滤器并存储位置。

现在,在这种情况下,实际上用户有两个请求。 一种是通过GET #new ,另一种是通过POST #create 后来,他对#new最后一个请求被记录为返回位置。 所以您会看到您总是回到#new :)

解决方案是过滤要存储的位置。

def store_location
  disable_pattern = /\A\/user*/
  session[:return_to] = request.fullpath unless request.fullpath ~= disable_pattern
end

这种模式可以解决当前的问题,但不是排他的。 实际上,您甚至可能已经记录了JS / JSON请求,因此您可能需要根据具体情况添加更多限制。 例如,仅在#show或#index上应用before_filter ,使用白名单等。

我认为request.referer可能由于该方法中的输入错误而无法正常工作。 应该是request.referrer

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM