diff options
| author | Michael Merickel <michael@merickel.org> | 2016-07-16 16:53:53 -0500 |
|---|---|---|
| committer | Michael Merickel <michael@merickel.org> | 2016-07-16 16:53:53 -0500 |
| commit | ba71cf32d543257cf51d1f00104f4a89ca794a42 (patch) | |
| tree | 5e49fd3f622d15ebcfb21d905e0768b31ae7ce74 /docs/tutorials/wiki2/src/authorization | |
| parent | 950515b5ca2c6f1c0c062284fd48a7ea02b552b4 (diff) | |
| download | pyramid-ba71cf32d543257cf51d1f00104f4a89ca794a42.tar.gz pyramid-ba71cf32d543257cf51d1f00104f4a89ca794a42.tar.bz2 pyramid-ba71cf32d543257cf51d1f00104f4a89ca794a42.zip | |
fix the wiki2 tutorial to set the password as unicode
Something really weird is happening but this fixes it. SQLAlchemy is
returning the "password_hash" from queries as the type that it was
inserted as. Not consistently unicode or bytes. If I insert bytes, then
I get bytes back out. If I insert unicode then I get unicode back out.
It's unclear why, as the type is Text, the data we're storing is
unambiguously US-ASCII and the connection is using a consistent
text_factory for unicode conversions of "str" on Python 3.
Here, we ensure that we always insert the value as unicode which appears
to fix downstream issues like those mentioned in #2605. I was able to
reproduce that bug and confirm this fixes it if the original database is
initialized using this fix.
Obsoletes #2623.
Diffstat (limited to 'docs/tutorials/wiki2/src/authorization')
| -rw-r--r-- | docs/tutorials/wiki2/src/authorization/tutorial/models/user.py | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/docs/tutorials/wiki2/src/authorization/tutorial/models/user.py b/docs/tutorials/wiki2/src/authorization/tutorial/models/user.py index 6fb32a1b2..9228b48f7 100644 --- a/docs/tutorials/wiki2/src/authorization/tutorial/models/user.py +++ b/docs/tutorials/wiki2/src/authorization/tutorial/models/user.py @@ -19,11 +19,10 @@ class User(Base): def set_password(self, pw): pwhash = bcrypt.hashpw(pw.encode('utf8'), bcrypt.gensalt()) - self.password_hash = pwhash + self.password_hash = pwhash.decode('utf8') def check_password(self, pw): if self.password_hash is not None: expected_hash = self.password_hash.encode('utf8') - actual_hash = bcrypt.hashpw(pw.encode('utf8'), expected_hash) - return expected_hash == actual_hash + return bcrypt.checkpw(pw.encode('utf8'), expected_hash) return False |
