Koi_jp
@Koi_jp

Как заставить работать custom authentication backend в django?

Пишу кастомный бэкэнд авторизации. Собстевнно написал его и еще написал кастомну мадель пользователь. Содержимое models.py моего приложения:
from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.utils.encoding import python_2_unicode_compatible
import hashlib
from django.conf import settings
# Create your models here.
@python_2_unicode_compatible
class VK_User(AbstractBaseUser):
    uid = models.IntegerField(primary_key=True, unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    photo_rec_url = models.CharField(max_length=200)
    have_active_post = models.BooleanField(default=False)
    last_point = models.CharField(max_length=100, default="")
    USERNAME_FIELD = 'uid'
    def __str__(self):
        return "%s %s %d" % (self.first_name, self.last_name, self.uid)

class HashBackend(object):

    def authenticate(self, first_name=None, last_name=None, photo_rec=None, uid=None, hash=None):
        md5 = hashlib.md5()
        md5.update(settings.VK_APP_ID + uid + settings.VK_API_SECRET)
        if md5.digest() == hash:
            try:
                vk_user = VK_User.objects.get(uid=uid)
            except VK_User.DoesNotExist:
                vk_user = VK_User(uid=uid, first_name=first_name, last_name=last_name, photo_rec=photo_rec)
                vk_user.save()
            return vk_user
        return None

    def get_user(self, user_id):
        try:
            return VK_User.objects.get(pk=uid)
        except VK_User.DoesNotExist:
            return None

Строчки из settings.py:
AUTH_USER_MODEL = 'posts.VK_User'
AUTHENTICATION_BACKENDS = ['posts.models.HashBackend',]


views.py, где хочу авторизировать пользователя:
from django.shortcuts import render
from django.http import HttpResponse
from posts.models import VK_User, HashBackend

# Create your views here.

def index(request):
    return render(request, 'posts/auth.html', {})

def registration(request):
    vk_user = authenticate(request.GET.get('first_name'), request.GET.get('last_name'), request.GET.get('photo_rec'), request.GET.get('uid'), request.GET.get('hash'))
    if vk_user is not None:
        redirect("specify_point", foo='bar')
    else:
        return HttpResponse("fail")

def spicify_point(request):
    if request.vk_user.is_authenticated():
        return HttpResponse(request.vk_user.first_name + ", " + "specify your city.")

Вот, что получаю в вызове registration:
NameError at /dev/Login
global name 'authenticate' is not defined
  • Вопрос задан
  • 1048 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы