是否有人有关于检查匹配密码的行业标准或最佳做法的任何信息(例如Gmail的“密码不匹配”反馈“)?它是后端,前端还是客户端流程?或者它完全基于其他因素吗?
以下是我正在使用的代码示例(带有Bottle的Python)来注册用户。代码有效,但我不确定是否应该从后端提供flash message(返回“密码不匹配”)或者使用像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)
答案 0 :(得分:16)
在注册过程中检查两个密码字段是否匹配应该完全由客户端逻辑完成。它是为了防止用户错误地在其密码中插入拼写错误而提供的。服务器端检查是没有意义的,因为你的客户端会阻止它,如果你的用户是一个技术精明的人,用curl做所有事情,那么如果他们陷入困境就会在他们身上。
此外,我将扩展您关于最佳做法的问题。如果没有用户首先通过链接进行验证(通常是发送到他们的电子邮件),则不应立即将用户保存在数据库中。请记住:永远不要相信用户提供的任何内容。
答案 1 :(得分:-1)
您需要区分两种情况:
对于 1 ,我只会在提交值或键入时使用常规连接到后端(如果后端的响应足够快)。
对于 2 ,您有以下几种选择:
然而,您的示例包含两个密码的匹配(相等检查)。这是一种特殊情况,因为您无法使用正则表达式来检查值的有效性。这排除了上面推荐的案例,并留下了另外两个提到的解决方案。
如果您的唯一目的是比较这两个值,我建议复制逻辑。在这种情况下复制(imho)有点合理,因为检查非常简单并且不可能随时间改变。对后端进行检查以检查是否相等是(imho)夸大其词。