如何为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操作:
- 登录Azure门户,进入「Azure Active Directory」→「应用注册」→「新注册」
- 填写应用名称,根据需求选择帐户支持范围(比如选「任何组织目录中的帐户和个人Microsoft帐户」)
- 在「重定向URI」里填入
http://localhost:8000/accounts/microsoft/login/callback/(本地开发用,生产环境要换成你的域名) - 注册完成后,在「概述」页面复制「客户端ID」
- 进入「证书和密码」→「客户端密码」→「新客户端密码」,设置过期时间后复制生成的「客户端密码」(只显示一次,务必保存好)
第五步:在Django后台配置Social Application
- 运行
python manage.py migrate创建allauth需要的数据库表 - 启动Django服务器,登录后台(
/admin) - 找到「Social accounts」下的「Social applications」→「添加」
- 「Provider」选择「Microsoft」,填写「Name」(自定义名称即可),「Client id」和「Secret key」填入刚才在Azure复制的内容
- 在「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
相关产品推荐
相关产品推荐

