Я только начал работать в 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" не указано!
Кто-нибудь знает, что я делаю неправильно?
Спасибо за ваш ответ, но как я могу аутентифицировать эти объекты User, если у меня нет пароля? – hY8vVpf3tyR57Xib
@ user3361028: Вы можете использовать аутентификацию без пароля. Это должно помочь: http://stackoverflow.com/questions/2787650/manually-logging-in-a-user-without-password –