2015-04-04 2 views
1

Я только начал работать в Django, и это потрясающе!Аутентификация django с Authomatic - Лучший рабочий процесс

Я хочу, чтобы мое веб-приложение было доступно для ограниченного числа людей с их учетной записью Twitter. Чтобы реализовать это, я использую плагин Authomatic.

This - пример стартера, который показывает, как вы можете использовать Authomatic с Django. Исходя из этого, я использую следующий код Snippit:

def login(request, provider_name): 
    # We we need the response object for the adapter. 
    response = HttpResponse() 

    # Start the login procedure. 
    result = authomatic.login(DjangoAdapter(request, response), provider_name) 

    if result: 
     response.write('<a href="..">Home</a>') 

     elif result.user: 
      if not (result.user.name and result.user.id): 
       result.user.update() 

      var username = result.user.name 
      var id = result.user.id 
return response 

Мой вопрос заключается в следующем: После проверки, если имя пользователя является одним из разрешенных твиттеръюзеров, как мне войти в системе, так что кан пользователя просматривать все защищенные страницы? Я привык использовать что-то вроде этого:

user = authenticate(username=username, password=password) 
if user is not None: 
    if user.is_active: 
     login(request, user) 

Но проблема заключается в том, что пользователи Twitter не имеют объекта пользователя, назначенного им. Единственное, что я могу думать выключения жесткого кодирования по умолчанию «разрешено» пользователь в своем коде, но это кажется довольно хитроумный ...

EDIT: Я пытался реализовать ответ Ashwin, но это дает мне это:

# Нам нужен объект ответа для адаптера. ответ = HttpResponse()

# Start the login procedure. 
result = authomatic.login(DjangoAdapter(request, response), provider_name) 
if result: 
    response.write('<a href="..">Home</a>') 
if result.error: 
    # Login procedure finished with an error. 
    response.write('<h2>Damn that error: {0}</h2>'.format(result.error.message)) 

elif result.user: 
    # We need to update the user to get more info. 
    if not (result.user.name and result.user.id): 
     result.user.update() 

    # Welcome the user. 
    response.write(u'<h1>Hi {0}</h1>'.format(result.user.name)) 
    response.write(u'<h2>Your id is: {0}</h2>'.format(result.user.id)) 
    response.write(u'<h2>Your email is: {0}</h2>'.format(result.user.email)) 

    # if result.user.id == 110740012624414845989: 
    uname = result.user.id 
    pwd = '** RANDOM PASSOWRD I SHOULD HAVE? **' 
    user = authenticate(username=uname, password=pwd) 
    login(request, user) 

Прежде всего, я не могу себе представить, что это хорошая практика, чтобы иметь пароль writter в моем коде, как это. Второй я получаю ошибку Имя поставщика "username" не указано!

Кто-нибудь знает, что я делаю неправильно?

ответ

0

Вы можете создавать отдельные объекты Пользователя для всех разрешенных пользователей, тогда работа будет очень простой. Просто проверьте, доступно ли имя пользователя в базе данных, аутентифицируйте и запишите запрос.

+0

Спасибо за ваш ответ, но как я могу аутентифицировать эти объекты User, если у меня нет пароля? – hY8vVpf3tyR57Xib

+0

@ user3361028: Вы можете использовать аутентификацию без пароля. Это должно помочь: http://stackoverflow.com/questions/2787650/manually-logging-in-a-user-without-password –

Смежные вопросы