【问题标题】:How to setup Microsoft authentication in a django based project如何在基于 django 的项目中设置 Microsoft 身份验证
【发布时间】:2020-03-22 08:04:12
【问题描述】:

我在我的 Django 项目中使用 django-microsoft-auth。我关注了this guide. 现在,我可以通过 Microsoft 帐户(地址:http://localhost:8000/admin)登录,但我不知道如何添加一个显示“使用 Microsoft 登录”的视图以及如何将该视图与 Microsoft 身份验证页面链接。 如果有人能告诉我如何做到这一点,那就太好了。 你可以看到this图片。这里会自动添加 Microsoft 按钮以进行登录。如何在首页设置这样的按钮?

【问题讨论】:

  • 我也在想同样的事情。我一直在尝试调整在管理页面上运行的代码以在我的应用程序的主页上运行,但没有运气。
  • 我找到了解决方案。我会尽快回答。
  • 我有页面上的链接,但无法登录。我得到An invalid state variable was provided。如果我查看管理页面上生成的 URL 并将其与我的状态进行比较,则状态确实不同。但我使用从 {{ microsoft_authorization_url }} 获取 URL 的相同代码。我觉得我错过了一件小事。
  • 期待您的解决方案,

标签: python django microsoft-graph-api django-authentication azure-authentication


【解决方案1】:

我找到了一种方便的 Microsoft 身份验证方法。我用 微软图表。 Microsoft Graph 有编写良好的文档。你可以参考这个here。如果您只对身份验证部分感兴趣,则可以忽略日历部分。

首先你应该通过给定的教程,然后你可以很容易地理解下面给出的代码。

在给定的教程中,他们使用会话对用户进行身份验证。我找到了 Django 身份验证handier,所以我只编辑了回调和注销函数,如下所示。

这里我只写回调和注销函数。

我的问题是如何解决的:现在我可以简单地更改 urls.py 文件中的登录 URL。如果我想设置一个带有登录页面的按钮,我可以简单地使用一个引用登录 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')

【讨论】:

  • 谢谢,但我正在寻找使用 django-microsoft-auth 的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 2018-02-14
  • 1970-01-01
  • 2016-01-23
相关资源
最近更新 更多