有没有人知道检查匹配密码的行业标准或最佳实践(例如Gmail的“密码不匹配”反馈)?它是后端、前端还是客户端流程?还是完全基于其他因素?在
下面是我使用的代码示例(Python with Bottle)注册用户。代码可以工作,但是我不确定是否应该从后端提供一个flash message(它返回“Passwords dot not match”),还是使用JS之类的东西更好?我知道有脚本可以验证这一点,但它们都是JS。我的问题不是如何用JS实现,而是哪个是首选方法。在
@route('/suser', method='POST')
def sign_suser():
cemail = request.forms.get('semail')
cpassword1 = request.forms.get('spass1')
cpassword2 = request.forms.get('spass2')
ctype = request.forms.get('stype')
if cpassword1 != cpassword2:
return "<p>Passwords do not match</p>"
else:
pwhash = crypt(cpassword1)
connection = sqlite3.connect("whatever.db")
cursor_v = connection.cursor()
cursor_v.execute("insert into users (cemail, cpassword, atype) values (?,?,?)", (cemail,pwhash,ctype))
connection.commit()
cursor_v.close()
info = {'status': 'User Added',
'type': 'success'}
return template('whatever',info)
您需要区分两种情况:
对于1,我只会在提交值或键入时使用与后端的常规连接(如果来自后端的响应足够快)。在
对于2,您有几个选项:
但是,您的示例包含两个密码的匹配(相等性检查)。这是一个特殊情况,因为不能使用正则表达式检查值的有效性。上述两种情况排除了上述两种解决方案。在
如果您的唯一目的是比较这两个值,我建议复制逻辑。在这种情况下,复制(imho)在某种程度上是合理的,因为检查非常简单,不太可能随着时间的推移而改变。对后端进行检查以完全检查平等性(imho)被夸大了。在
在注册过程中检查两个密码字段是否匹配应该完全通过客户端逻辑来完成。它是为了防止用户错误地在他们的密码中插入错误。服务器端检查是没有意义的,因为你的客户机会阻止它,如果你的用户是一个精通技术的人,什么都用curl来做,那么如果他们搞砸了,那就由他们来做。在
此外,我还将扩展您关于最佳实践的问题。你不应该立即将用户保存在你的数据库,没有他们首先通过一个链接,通常发送到他们的电子邮件,验证它是有效的。记住:不要相信用户提供的任何东西。在
相关问题 更多 >
编程相关推荐