Как настроить аутентификацию Microsoft в проекте на основе django

Я использую django-microsoft-auth в своем проекте Django. Я выполнил это руководство. Теперь я могу войдите в систему через учетную запись Microsoft (адрес: http://localhost:8000/admin), но я не знаю как добавить представление с надписью «Войти с помощью Microsoft» и как связать это представление со страницей аутентификации Microsoft. Будет здорово, если кто-нибудь подскажет, как это сделать. Вы можете увидеть это изображение. Здесь автоматически добавляется кнопка Microsoft для входа в систему. Как настроить такую ​​кнопку на главной странице?


person Sudesh Chaudhary    schedule 22.03.2020    source источник
comment
Мне интересно то же самое. Я пытался адаптировать код, который работает на странице администратора, для работы на главной странице моего приложения, но безуспешно.   -  person Larry Martell    schedule 29.04.2020
comment
Я нашел решение. Я скоро на это отвечу.   -  person Sudesh Chaudhary    schedule 29.04.2020
comment
У меня есть ссылка на странице, но не работает логин. Я получаю An invalid state variable was provided. Если я посмотрю на URL-адрес, сгенерированный на странице администратора, и сравню его с моим, состояние действительно будет другим. Но я использую тот же код, который получает URL-адрес из {{microsoft_authorization_url}}. Я чувствую, что упускаю одну мелочь.   -  person Larry Martell    schedule 30.04.2020
comment
Я с нетерпением жду вашего решения,   -  person Larry Martell    schedule 30.04.2020


Ответы (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')
person Sudesh Chaudhary    schedule 30.04.2020
comment
Спасибо, но я искал решение с использованием django-microsoft-auth - person Larry Martell; 30.04.2020