ruby 如何使用'devise'在会话过期时重新登录到同一页面

2ekbmq32  于 2023-06-22  发布在  Ruby
关注(0)|答案(2)|浏览(116)

用户已登录,其会话已过期。所以现在我想要的是,当用户再次登录时,他应该被重定向到他在会话过期前的同一页面。如果我尝试用最后一个页面的位置设置一个会话变量,那么当它过期时,会话也会被销毁。
我在设备的文档中遵循 How To: redirect to a specific page on successful sign in out

ktca8awb

ktca8awb1#

会话?Pff,尝试使用cookie,更新页面URL在每个页面上的cookie,因此当他们离开,它将回到最后一个浏览的页面,cookie将保留。但是,我不能举一个例子,我甚至不知道Ruby是什么?希望这里也有饼干。
我可以告诉你基本的逻辑,好吗?
用户访问页面:

A: URL = www.abc.com/A
B: URL = www.abc.com/B

然而,当他们加载A时,它会将cookie设置为URL /A。当它们转到B时,它设置URL B。他们离开了然后当它们返回时,它仍然会被设置为B,你可以用它将它们重定向到B的URL。

iswrvxsc

iswrvxsc2#

class ApplicationController < ActionController::Base
  before_action :store_user_location!, if: :storable_location?
  before_action :authenticate_user!

    private
    def storable_location?
          request.get? && is_navigational_format? && !devise_controller? && !request.xhr? 
        end

    def store_user_location!
      # :user is the scope we are authenticating
      store_location_for(:user, request.fullpath)
    end
end

然后要在登录后重定向,您必须重写此方法:

def after_sign_in_path_for(resource_or_scope)
  stored_location_for(resource_or_scope) || super
end

相关问题