msyz999明仕亚洲Flask中的用户确认题目

在学习Flask-Web开辟这本书的第八章遇到了题目,便是在数据库模型中添加确认用户账户的服从时,有如许一段代码:

class UserUserMixin,db.Model:

__tablename__ = users
id = db.Columndb.Integer,primary_key=True
email = db.Columndb.String64,unique=True,index=True
username=db.Columndb.String64,unique=True,index=True
role_id = db.Columndb.Integer,db.ForeignKeyroles.id
password_hash = db.Columndb.String128
confirmed = db.Columndb.Boolean,default=False

@property
def passwordself:
    raise AttributeErrorpassword is not a readable attribute.

@password.setter
def passwordself,password:
    self.password_hash =generate_password_hashpassword

def verify_passwordself,password:
    return check_password_hashself.password_hash,password

def generate_confirmation_tokenself,expiration=3600:
    s=Serializercurrent_app.config[SECRET_KEY],expiration
    return s.dumps{confirm:self.id}

def confirmself,token:
    s=Serializercurrent_app.config[SECRET_KEY]
    try:
        data=s.loadstoken
    except:
        return False 
    if data.get"confirm" != self.id:
        return False
    self.confirmed = True
    db.session.addself
    db.session.commit
    return True

def __repr__self:
    return <User %r> % self.username

confirm()办法验证令牌。
此中,有一段是如许的:if data.get”confirm” != self.id,正常情况下data前往的不便是原数据么({confirm:self.id}),加这段代码的意义是什么
书中有表明:confirm办法还反省令牌中的id能否和存储在current_user中的已登任命户婚配。这里的current_user能否便是指正在中断验证的这个用户?关于Flask来说,尚未确认的用户也算已登录的用户吗,即current_user.is_authentiacated为True。将代码改为

          if data.get"confirm" != current_user.get_id:

可否?

以及最后一句话,添加这段代码:if data.get”confirm” != self.id,即使恶意用户知道怎样天生署名令牌,也无法确认他人的账户。账户应该是指注册或许登录时的email吧,这段代码确认了confirm数据能否为用户独一id号,和用户账户(email)有什么干系

def confirmself,token:
    s=Serializercurrent_app.config[SECRET_KEY]
    try:
        data=s.loadstoken
    except:
        return False 
    if data.get"confirm" != self.id:
        return False
    self.confirmed = True
    db.session.addself
    db.session.commit
    return True
    

需求留意的是这里的tokenSECRET_KEY

这里的data颠着末一次data=s.loadstoken,假如token和SECRET_KEY不精确的话,get失掉的id也是不精确的,如许就起到了验证的作用。

这里的账户指的是每个账户自己的id,就算恶意用户告成伪造了token,由于用户的id号不精确,这里无法告成验证。

登录和确认是两个属性,这两个之间没有耦合的干系,没有登录的账户也可以是确认过的,以是没有确认的账户也可以是登录形状的。

(看完/读完)这篇文章有何感想! msyz999明仕亚洲的分享…

发表评论

姓名 *
电子邮件 *
站点