You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Django应用添加Office365登录认证及在request中使用该用户?

为Django应用添加Office365登录认证指南

我来一步步教你给Django应用加上Office365登录功能,整个流程用django-allauth就能轻松搞定——这是Django生态里最成熟的第三方认证库之一,完美支持OAuth2协议的Office365认证。

第一步:安装依赖包

首先在你的虚拟环境里安装django-allauth:

pip install django-allauth

第二步:配置Django项目设置

打开项目根目录的settings.py,做以下修改:

1. 添加INSTALLED_APPS

把allauth相关的应用加到列表里:

INSTALLED_APPS = [
    # 其他默认应用...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.microsoft',  # Office365对应的认证提供者
]

2. 配置认证后端

告诉Django同时使用默认认证和allauth的认证后端:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',  # 默认Django用户名密码认证
    'allauth.account.auth_backends.AuthenticationBackend',  # allauth第三方认证
]

3. 基础配置补充

添加站点ID和登录/登出重定向规则:

SITE_ID = 1  # allauth需要这个字段关联站点配置
LOGIN_REDIRECT_URL = '/'  # 登录成功后跳转的页面
LOGOUT_REDIRECT_URL = '/'  # 登出后跳转的页面

第三步:配置项目URLs

打开项目根目录的urls.py,添加allauth的认证路由:

from django.urls import path, include

urlpatterns = [
    # 其他已有路由...
    path('accounts/', include('allauth.urls')),  # allauth的认证路由集合
]

第四步:在Azure门户创建Office365应用注册

这一步是获取认证凭证的关键,需要在Microsoft Azure操作:

  1. 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新注册」
  2. 填写应用名称,根据需求选择帐户支持范围(比如选「任何组织目录中的帐户和个人Microsoft帐户」)
  3. 在「重定向URI」里填入http://localhost:8000/accounts/microsoft/login/callback/(本地开发用,生产环境要换成你的域名)
  4. 注册完成后,在「概述」页面复制「客户端ID」
  5. 进入「证书和密码」→「客户端密码」→「新客户端密码」,设置过期时间后复制生成的「客户端密码」(只显示一次,务必保存好)

第五步:在Django后台配置Social Application

  1. 运行python manage.py migrate创建allauth需要的数据库表
  2. 启动Django服务器,登录后台(/admin)
  3. 找到「Social accounts」下的「Social applications」→「添加」
  4. 「Provider」选择「Microsoft」,填写「Name」(自定义名称即可),「Client id」和「Secret key」填入刚才在Azure复制的内容
  5. 在「Sites」里把你的站点(比如默认的example.com)添加到「Chosen sites」,保存配置

第六步:在模板中添加Office365登录按钮

在你的模板文件(比如base.html)里添加登录链接,记得先加载allauth的模板标签:

{% load socialaccount %}
<a href="{% provider_login_url 'microsoft' %}">使用Office365登录</a>

第七步:在视图中使用认证后的用户

登录成功后,Django的request.user对象就会对应这个Office365用户,和普通Django用户用法完全一致:

  • 判断用户是否登录:request.user.is_authenticated
  • 获取用户邮箱:request.user.email(默认会同步Office365的邮箱)
  • 获取用户名:request.user.username(allauth默认用邮箱前缀作为用户名,可在settings里自定义规则)
  • 如果需要扩展用户信息,可通过OneToOneField关联Django的User模型,存储额外的Office365相关字段

额外提示

  • 生产环境建议启用HTTPS,Azure官方要求生产环境的重定向URI必须是HTTPS
  • 可以通过allauth的user_signed_up信号,处理用户首次登录时的额外逻辑(比如发送欢迎邮件)
  • 若使用自定义用户模型,可在settings.py里配置ACCOUNT_USER_MODEL_USERNAME_FIELD等参数适配

内容的提问来源于stack exchange,提问作者Prateek Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:28:57