自定义用户认证。最佳实践怎么做?
我正在使用Google Engine App和Python。我想添加自定义用户认证。这个怎么做,最好的做法是什么?
我想要自定义认证,因为这个应用是用Flex构建的,我不想跳转到一个HTML页面。
用户的值对象是这样的:
class User(db.Model):
email = db.EmailProperty(required = True, indexed = True)
masked_password = db.StringProperty(required = True)
# maybe more things here
我想要对密码进行加密,GAE里有没有什么内置的功能可以用?
那么,我该如何记住当前用户呢?是通过会话和 cookies 还是其他什么方法?
2 个回答
1
不要自己去实现身份验证。
把首页标记为需要身份验证(也就是在app.yaml里写上“login: required”),这样当用户访问首页时,他们会被要求先登录,才能看到你的Flash/Flex应用。如果他们已经登录过了,就可以直接进入你的应用。
这样可以避免Flash和HTML之间的问题,同时也能利用系统自带的身份验证功能(我的应用在数据存储中保存了用户设置和权限的表格,但只是用GAE认证的当前用户身份作为关键)。
3
密码:
处理密码的最佳方法是为每个用户存储一个随机的盐值(salt),以及密码和盐值组合后的哈希值。哈希值就是一种把密码变成一串看起来随机的字符的方法。
当用户想要登录时,你需要计算一下密码和盐值的哈希值,然后看看这个值是否和你最开始存储的哈希值一样。这样做的目的是为了不直接存储用户的密码,而且即使两个用户的密码相同,他们的哈希值也会不同。
网上有很多关于这个的例子,你可以去看看。
会话:
实现会话的方法有很多,使用 cookies 是一种很流行的方式。我建议你使用一些现成的库来处理这个问题。你可以查看这个 库的比较。