• BaiJiangJie's avatar
    [Update] 支持 OpenID 认证 (#2008) · e09f3ca4
    BaiJiangJie authored
    * [Update] core支持openid登录,coco还不支持
    
    * [Update] coco支持openid登录
    
    * [Update] 修改注释
    
    * [Update] 修改 OpenID Auth Code Backend 用户认证失败返回None, 不是Anonymoususer
    
    * [Update] 修改OpenID Code用户认证异常捕获
    
    * [Update] 修改OpenID Auth Middleware, check用户是否单点退出的异常捕获
    
    * [Update] 修改config_example Auth OpenID 配置
    
    * [Update] 登录页面添加 更多登录方式
    
    * [Update] 重构OpenID认证架构
    
    * [Update] 修改小细节
    
    * [Update] OpenID用户认证成功后,更新用户来源
    
    * [update] 添加OpenID用户登录成功日志
    e09f3ca4
middleware.py 1.16 KB
# coding:utf-8
#

from django.conf import settings
from django.contrib.auth import logout
from django.utils.deprecation import MiddlewareMixin
from django.contrib.auth import BACKEND_SESSION_KEY

from . import client
from common.utils import get_logger
from .backends import BACKEND_OPENID_AUTH_CODE
from authentication.openid.models import OIDT_ACCESS_TOKEN

logger = get_logger(__file__)


class OpenIDAuthenticationMiddleware(MiddlewareMixin):
    """
    Check openid user single logout (with access_token)
    """

    def process_request(self, request):

        # Don't need openid auth if AUTH_OPENID is False
        if not settings.AUTH_OPENID:
            return

        # Don't need check single logout if user not authenticated
        if not request.user.is_authenticated:
            return

        elif request.session[BACKEND_SESSION_KEY] != BACKEND_OPENID_AUTH_CODE:
            return

        # Check openid user single logout or not with access_token
        try:
            client.openid_connect_client.userinfo(
                token=request.session.get(OIDT_ACCESS_TOKEN))

        except Exception as e:
            logout(request)
            logger.error(e)