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

来源:互联网 发布:linux公社ftp下载 编辑:程序博客网 时间:2024/05/22 10:59

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(…)

0 0