Hi James. your hint  was actually very inspiring.

After concatenating  'drupal$' to the imported password, I was still unable
to authenticate. Then I realized that the passwords are in unicode but the
hasher considers them to be ascii, so I added :

password = password.encode('ascii','ignore')

at the begining of the both 'encode' and 'verify' methods

This solved the problem and saved my escape rout out of drupal :)

Thank you very much for your hint.

On Tue, Jan 27, 2015 at 9:04 PM, James Schneider <[email protected]>
wrote:

> Did you read the comments on that snippet? It appears there may need to be
> some extra encoding/decoding needed (example additional code is listed
> there), which would make sense given the decoding errors you are seeing.
>
> -James
> On Jan 27, 2015 9:54 AM, "Supermario" <[email protected]> wrote:
>
>> I try to implement this <https://djangosnippets.org/snippets/3030/>
>> hasher in order to be able to authenticate user who are imported from
>> drupal 7.
>>
>> So I put the hasher in the settings.py as follows:
>>
>>
>> PASSWORD_HASHERS = (
>>
>>     'myproj.drupal_hasher.DrupalPasswordHasher', #drupal hasher
>>
>>     'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
>>
>>     'django.contrib.auth.hashers.BCryptPasswordHasher',
>>     'django.contrib.auth.hashers.SHA1PasswordHasher',
>>     'django.contrib.auth.hashers.MD5PasswordHasher',
>>     'django.contrib.auth.hashers.CryptPasswordHasher',
>>      )
>>
>>
>>
>> However it does not authenticate imported users from drupal and for users
>> who are created in Django I get:
>>
>>     'ascii' codec can't decode byte 0xcf in position 0: ordinal not in
>> range(128)
>>
>>
>>
>>
>> Here is the trackback:
>>
>>
>>     Environment:
>>
>>
>>     Request Method: POST
>>     Request URL: http://127.0.0.1:8000/auth/
>>
>>     Django Version: 1.7.3
>>     Python Version: 2.7.3
>>     Installed Applications:
>>     ('django.contrib.admin',
>>      'django.contrib.auth',
>>      'django.contrib.contenttypes',
>>      'django.contrib.sessions',
>>      'django.contrib.messages',
>>      'django.contrib.staticfiles',
>>      'article',
>>      'photo',
>>      'debug_toolbar',
>>      'django_markdown',
>>      'haystack')
>>     Installed Middleware:
>>     (u'debug_toolbar.middleware.DebugToolbarMiddleware',
>>      'django.contrib.sessions.middleware.SessionMiddleware',
>>      'django.middleware.common.CommonMiddleware',
>>      'django.middleware.csrf.CsrfViewMiddleware',
>>      'django.contrib.auth.middleware.AuthenticationMiddleware',
>>      'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
>>      'django.contrib.messages.middleware.MessageMiddleware',
>>      'django.middleware.clickjacking.XFrameOptionsMiddleware')
>>
>>
>>     Traceback:
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/core/handlers/base.py"
>> in get_response
>>       111.                     response = wrapped_callback(request, *
>> callback_args, **callback_kwargs)
>>     File "/home/mario/myproj/myauth/views.py" in auth_view
>>       16.     user = auth.authenticate(username=username, password=
>> password)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py"
>> in authenticate
>>       60.             user = backend.authenticate(**credentials)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/backends.py"
>> in authenticate
>>       17.             if user.check_password(password):
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/models.py"
>> in check_password
>>       237.         return check_password(raw_password, self.password,
>> setter)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/hashers.py"
>> in check_password
>>       63.         setter(password)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/models.py"
>> in setter
>>       235.             self.set_password(raw_password)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/models.py"
>> in set_password
>>       227.         self.password = make_password(raw_password)
>>     File
>> "/home/mario/.myprojenv/local/lib/python2.7/site-packages/django/contrib/auth/hashers.py"
>> in make_password
>>       85.     return hasher.encode(password, salt)
>>     File "/home/mario/myproj/myproj/drupal_hasher.py" in encode
>>       81.         encoded_hash = self._apply_hash(password, self._digests
>> [digest], settings)
>>     File "/home/mario/myproj/myproj/drupal_hasher.py" in _apply_hash
>>       68.             password_hash = digest(password_hash + password).
>> digest()
>>
>>     Exception Type: UnicodeDecodeError at /auth/
>>     Exception Value: 'ascii' codec can't decode byte 0xcf in position 0:
>> ordinal not in range(128)
>>
>>
>> All source and destination database tables are converted to
>> utf8_unicode_ci.
>>
>> I am stock on this problem for days so really appreciate your help.
>>
>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/django-users.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/django-users/5dd15420-01d5-4b1f-adf0-af3ee585ba73%40googlegroups.com
>> <https://groups.google.com/d/msgid/django-users/5dd15420-01d5-4b1f-adf0-af3ee585ba73%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>  --
> You received this message because you are subscribed to a topic in the
> Google Groups "Django users" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/django-users/SsTGFmnlNgM/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CA%2Be%2BciW9H3qLosHWPUrvC%2BZub%3DsJEXdU1-UMpkBK%2BrwKFH%2BZeA%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-users/CA%2Be%2BciW9H3qLosHWPUrvC%2BZub%3DsJEXdU1-UMpkBK%2BrwKFH%2BZeA%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CACGMvYrzuj1WAJ%3D9GcFc_-DEO-r2_SEZ_-uqPAPgC-BsFiNShQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to