Я использую django-microsoft-auth в своем проекте Django. Я выполнил это руководство. Теперь я могу войдите в систему через учетную запись Microsoft (адрес: http://localhost:8000/admin), но я не знаю как добавить представление с надписью «Войти с помощью Microsoft» и как связать это представление со страницей аутентификации Microsoft. Будет здорово, если кто-нибудь подскажет, как это сделать. Вы можете увидеть это изображение. Здесь автоматически добавляется кнопка Microsoft для входа в систему. Как настроить такую кнопку на главной странице?
Как настроить аутентификацию Microsoft в проекте на основе django
Ответы (1)
Я нашел удобный способ аутентификации Microsoft. Я использовал график Microsoft. Для Microsoft Graph есть хорошо написанная документация. вы можете обратиться к этому здесь. Вы можете игнорировать календарную часть, если вас интересует только часть аутентификации.
Сначала вы должны пройти данное руководство, после чего вы сможете легко понять приведенный ниже код.
В данном руководстве они аутентифицируют пользователя с помощью сеансов. Я нашел средство аутентификации Django, поэтому я просто отредактировал функцию обратного вызова и выхода, как указано ниже.
Здесь я пишу только функцию обратного вызова и выхода.
Как решена моя проблема: теперь я могу просто изменить URL-адрес для входа в файл urls.py. Если я хочу установить кнопку со страницей входа, я могу просто использовать элемент привязки, относящийся к URL-адресу входа.
def callback(request):
# Get the state saved in session
expected_state = request.session.pop('auth_state', '')
# Make the token request
token = get_token_from_code(request.get_full_path(), expected_state)
# Get the user's profile
user = get_user(token)
# Get user info
# user attribute like displayName,surname,mail etc. are defined by the
# institute incase you are using single-tenant. You can get these
# attribute by exploring Microsoft graph-explorer.
username = user['displayName']
password = user['surname']
email = user['mail']
try:
# if use already exist
user = User.objects.get(username=username)
except User.DoesNotExist:
# if user does not exist then create a new user
user = User.objects.create_user(username,email,password)
user.save()
user = authenticate(username=username,password=password)
if user is not None:
login(request,user)
messages.success(request,"Success: You were successfully logged in.")
return redirect('home')
return redirect('home')
def sign_out(request):
logout(request)
messages.success(request, "Successfully Logged Out")
return redirect('home')
An invalid state variable was provided
. Если я посмотрю на URL-адрес, сгенерированный на странице администратора, и сравню его с моим, состояние действительно будет другим. Но я использую тот же код, который получает URL-адрес из {{microsoft_authorization_url}}. Я чувствую, что упускаю одну мелочь. - person Larry Martell   schedule 30.04.2020