【问题标题】:External authentication in a Django appDjango 应用程序中的外部身份验证
【发布时间】:2017-03-07 12:14:47
【问题描述】:

正如标题所说,我正在开发一个 Django 应用程序,它使用另一个 API 来验证用户身份。外部 API 非常简单,如果用户通过了正确的身份验证,则会返回一个证书。我的应用不应该保留任何用户的信息,除了证书和 id(我作为会话变量保留)。

作为这个实现的一个缺点,我没有使用 Django 的身份验证系统和它提供的所有实用方法,比如检查用户是否is_authenticatedis_anonymous 或获取用户的权限。

由于用户必须登录才能访问我的应用程序的某些页面,我还必须要求他/她登录以便他/她可以继续。因此,使用@login_required 将是少数。

我还必须创建一个访问控制模块来检查权限并允许根据用户组(普通用户、管理员等)访问应用程序的某些受限区域。

你们知道如何定制 Django 的身份验证系统来处理所有这些问题吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    您必须在request 中保持登录用户,因此无需身份验证即可登录他

    from django.contrib.auth import login
    
    def authenticate_by_api_view(request):
        certificate = do_the_magic()
    
        if certificate_valid(certificate):
            user = User()
            #you can set ID here and save the user to the DB then
            login(request, user)
    

    如果您根本不想保存用户,可以查看django-lazysignup 项目或使用Django sessions framework

    【讨论】:

    • 目前,我正在使用 Django 会话,但它并没有为我提供检查用户是否经过身份验证的工具。每次调用方法时,我都必须手动检查会话属性。此外,处理用户必须在登录后才能访问的私有 URL 有点困难。你说得对,我不想保存任何用户。
    • 如果我是你并且我不想使用 lazysignup 我只会用一些临时数据保存用户 - 我最终会添加一些任务来删除用户上次登录日期在今天之前
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多