基于rails的schedule网站开发(11):记住我

abstract:
1. 生成随机字符串,当做记忆令牌;
2. 把这个令牌存入浏览器的 cookie 中,并把过期时间设为未来的某个日期;
3. 在数据库中存储令牌的摘要;
4. 在浏览器的 cookie 中存储加密后的用户 ID;
5. 如果 cookie 中有用户的 ID,就用这个 ID 在数据库中查找用户,并且检查 cookie 中的记忆令牌和数据库中的哈希摘要是否匹配。

title 1

title 3

1. 显示资料页面的链接:
<%= link_to "Profile", current_user %>
这个链接可以写成:
<%= link_to "Profile", user_path(current_user) %>
可以直接链接到用户对象,Rails 会自动把 current_user 转换成 user_path(current_user)。

2. 关于update_attribute存储:remember_digest:

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

先是remember user →调用session_helper.rb里的…

def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end

user.remember又调用models/user.rb里的…

def remember
    self.remember_token = User.new_token
    update_attribute(:remember_digest, User.digest(remember_token))
  end

这里的
update_attribute(:remember_digest, ...)
并没有指明是哪个用户model里的:remember_digest更新!
所以我的理解是:
user.remember 里的update_attribute(…)就是user.update_attribute(…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值