浏览器关闭时销毁会话-Ruby on Rails

巴特·萨拜顿

我使用“记住我”复选框来登录页面。记住我-显然要永久记住会话(有效期为20年),除非您单击注销按钮。

问题是,如果不检查“记住我”,我将无法登录。

SessionController:

  def create
    user = User.find_by(email: params[:email].downcase)
    if user && user.authenticate(params[:password])
      if params[:remember_me]
        sign_in user
        redirect_to root_url
      else
        User.find_by_id(session[:remember_token])
        session[:remember_token] = user.id
        redirect_to root_url
      end
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

会话助手

  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 signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end
肖阿里

在您的create方法中,当用户未选中“记住我”框时,您实际上并未将用户标记为已登录。它仅存储user.id在中session[:remember_token]

if user && user.authenticate(params[:password]) # valid email & password
  if params[:remember_me]                       # remember me
    sign_in user
    redirect_to root_url
  else                                          # do not remember me
    #User.find_by_id(session[:remember_token])  # this line did nothing
    session[:remember_token] = user.id          # store user.id in session
    redirect_to root_url
  end
else
  ...
end

current_user不签user.id入会话,仅检查Cookie或手动分配current_user

我会这样重写当前用户:

def current_user
  if @current_user
    @current_user
  elsif session[:remember_token]
    @current_user ||= User.find_by_id(session[:remember_token])
  elsif cookies[:remember_token]
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  else
    nil
  end
end

顺便说一句。标题与正文中定义的问题无关。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

浏览器关闭时销毁会话-Ruby on Rails

来自分类Dev

在Heroku上运行Ruby / Rails应用的浏览器没有“销毁”确认

来自分类Dev

Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

来自分类Dev

Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

来自分类Dev

从我的本地浏览器访问时,Ruby on Rails Routing错误

来自分类Dev

使用Ruby on Rails在浏览器中打印文本

来自分类Dev

在 Ruby on Rails 中调用控制器函数时如何保留相同的浏览器视图/页面?

来自分类Dev

Ruby on Rails帮助器

来自分类Dev

Ruby on Rails会话控制器InvalidAuthenticityToken

来自分类Dev

在Ruby on Rails中关闭按钮

来自分类Dev

Ruby on Rails模型字段是通过控制台而不是通过浏览器更新的

来自分类Dev

如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

来自分类Dev

Ruby on Rails。首次运行应用程序。继续在浏览器中遇到相同的错误。PagesController

来自分类Dev

ruby on rails,如果在浏览器中单击后退按钮,则重定向

来自分类Dev

Ruby on Rails模型字段是通过控制台而不是通过浏览器更新的

来自分类Dev

如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

来自分类Dev

Ruby on Rails错误捆绑器

来自分类Dev

Ruby on Rails 控制器

来自分类Dev

锁定编辑并销毁Ruby on Rails

来自分类Dev

锁定编辑并销毁Ruby on Rails

来自分类Dev

PHP-关闭浏览器后会话销毁

来自分类Dev

PHP-关闭浏览器后会话销毁

来自分类Dev

关闭浏览器时的会话超时

来自分类Dev

在ElastiCache上将Ruby on Rails会话保存

来自分类Dev

在Ruby on Rails中的Javascript中设置会话

来自分类Dev

Ruby_on_rails 会话和语法

来自分类Dev

使用 Ruby on Rails 更新和访问会话

来自分类Dev

Ruby on Rails:登录的 gem 设计会话

来自分类Dev

DRY 整数浮点转换器 ruby on rails/ruby

Related 相关文章

  1. 1

    浏览器关闭时销毁会话-Ruby on Rails

  2. 2

    在Heroku上运行Ruby / Rails应用的浏览器没有“销毁”确认

  3. 3

    Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

  4. 4

    Rails 4:当浏览器关闭时,会话值永远不会“过期”或消失

  5. 5

    从我的本地浏览器访问时,Ruby on Rails Routing错误

  6. 6

    使用Ruby on Rails在浏览器中打印文本

  7. 7

    在 Ruby on Rails 中调用控制器函数时如何保留相同的浏览器视图/页面?

  8. 8

    Ruby on Rails帮助器

  9. 9

    Ruby on Rails会话控制器InvalidAuthenticityToken

  10. 10

    在Ruby on Rails中关闭按钮

  11. 11

    Ruby on Rails模型字段是通过控制台而不是通过浏览器更新的

  12. 12

    如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

  13. 13

    Ruby on Rails。首次运行应用程序。继续在浏览器中遇到相同的错误。PagesController

  14. 14

    ruby on rails,如果在浏览器中单击后退按钮,则重定向

  15. 15

    Ruby on Rails模型字段是通过控制台而不是通过浏览器更新的

  16. 16

    如何使用Java脚本,Ruby on Rails禁用浏览器后退按钮

  17. 17

    Ruby on Rails错误捆绑器

  18. 18

    Ruby on Rails 控制器

  19. 19

    锁定编辑并销毁Ruby on Rails

  20. 20

    锁定编辑并销毁Ruby on Rails

  21. 21

    PHP-关闭浏览器后会话销毁

  22. 22

    PHP-关闭浏览器后会话销毁

  23. 23

    关闭浏览器时的会话超时

  24. 24

    在ElastiCache上将Ruby on Rails会话保存

  25. 25

    在Ruby on Rails中的Javascript中设置会话

  26. 26

    Ruby_on_rails 会话和语法

  27. 27

    使用 Ruby on Rails 更新和访问会话

  28. 28

    Ruby on Rails:登录的 gem 设计会话

  29. 29

    DRY 整数浮点转换器 ruby on rails/ruby

热门标签

归档