Auth模块的使用

这篇具有很好参考价值的文章主要介绍了Auth模块的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Auth模块的使用

auth认证

创建超级用户

python manage.py createsuperuser
姓名: 必须写
邮箱:可以不写
密码:加密的(经可能记住)(如果忘记可以去数据库里把加密的密码替换到忘记的密码中)

登入验证

auth.authenticate(request,username,password)
user = auth.authenticate(username=username, password=pwd)
#校验用户姓名和密码

自定义登入验证

例:实现用户名或邮箱登录验证。

from django.contrib.auth.backends import ModelBackend
from django.db.models import Q

class CustomBackend(ModelBackend):      # 继承ModelBackend类,重写authenticate()方法
    """
    自定义用户验证后端:支持用户名或邮箱登录。
    """

    def authenticate(self, request, username=None, password=None, **kwargs):        # 参数username实际是用户输入的登录账号
        try:
            user = UserProfile.objects.get(Q(username=username) | Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

然后别忘了在settings.py中配置该验证后端:

AUTHENTICATION_BACKENDS = ['yourfilepath.CustomBackend', ]    # yourfilepath是该类的目录

login(HttpRequest, user)

登录验证。该函数接受一个HttpRequest对象,以及一个认证了的User对象。

此函数使用django的session框架给某个已认证的用户附加上session id等信息。

from django.contrib.auth import authenticate, login
   
def my_view(request):
  username = request.POST['username']
  password = request.POST['password']
  user = authenticate(username=username, password=password)
  if user is not None:
    login(request, user)
    # Redirect to a success page.
    ...
  else:
    # Return an 'invalid login' error message.
    ...

logout(request)

登录注销用户。 

from django.contrib.auth import logout
   
def logout_view(request):
  logout(request)
  # 调用auth内置的注销方法

二、User对象

User对象属性:username,password(必填项)password用哈希算法保存到数据库

is_staff : 用户是否拥有网站的管理权限

is_active : 是否允许用户登录, 设置为"False",可以不用删除用户来禁止用户登录

is_authenticated()

如果是真正的 User 对象,返回值恒为 True 。 用于检查用户是否已经通过了认证。
通过认证并不意味着用户拥有任何权限,这个方法甚至也不检查该用户是否处于激活状态,只是表明用户成功的通过了认证。

这个方法很重要, 在后台用request.user.is_authenticated()判断用户是否已经登录,如果true则可以向前台展示request.user.name。

场景:

  1. 用户登陆后才能访问某些页面,
  2. 如果用户没有登录就访问该页面的话直接跳到登录页面
  3. 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址

方法1:

def my_view(request):
  if  request.user.is_authenticated():
    return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))

方法2:

django已经为我们设计好了一个用于此种情况的装饰器:login_requierd(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None)

from django.contrib.auth.decorators import login_required
      
@login_required
def my_view(request):
  ...

创建用户

使用 create_user 辅助函数创建用户(这个是普通用户):

from django.contrib.auth.models import User
user = User.objects.create_user(username='',password='',email='')

create_superuser:超级用户

from django.contrib.auth.models import User
user = User.objects.create_superuser(username='',password='',email='')

密码检查

check_password(password)

用户需要修改密码的时候,首先要让其输入原来的密码 ,如果给定的值通过了密码检查,返回 True (通过明文密码校验密码是否正确)

修改密码

使用 auth.hashers.make_password(password) 来修改密码

user = User.objects.get(username='')
user.password = auth.hashers.make_password(password='123')  # 修改密码,auth模块自动将明文转成密文
user.save()  # 修改密码一定要保存 

修改密码简单示例

from django.contrib.auth import hashers

@login_required
def set_password(request):
    user = request.user
    err_msg = ''
    if request.method == 'POST':
        old_password = request.POST.get('old_password', '')
        new_password = request.POST.get('new_password', '')
        repeat_password = request.POST.get('repeat_password', '')
        # 检查旧密码是否正确
        if user.check_password(old_password):
            if not new_password:
                err_msg = '新密码不能为空'
            elif new_password != repeat_password:
                err_msg = '两次密码不一致'
            else:
                user.password = hashers.make_password(new_password)
                user.save()
                return redirect("/login/")
        else:
            err_msg = '原密码输入错误'
    content = {
        'err_msg': err_msg,
    }
    return render(request, 'set_password.html', content)

三、认证进阶:自定义auth User模型

这内置的auth_user表这么好用,但是我在项目中没法直接使用啊!比如,我想要加一个存储用户手机号的字段,怎么办?

聪明的你可能会想到新建另外一张表然后通过一对一和内置的auth_user表关联,这样虽然能满足要求但是有没有更好的实现方式呢?

答案是当然有了。

我们可以通过继承内置的auth_user表的对应的类,来定义一个自己的ORM类:

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):    # 继承AbstractUser类
    """
    用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    
    def __str__(self):
        return self.username

注意!!!

按上面的方式扩展了内置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证。写法如下:文章来源地址https://www.toymoban.com/news/detail-749757.html

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

补充

# auth模块的密码加密--同样的密码--》再次加密--》密文也不一样
# 如何实现?
	pbkdf2_sha256$   # 加密方式 
    260000$           #过期时间
    H93ubuUFw6FbYc6B8ojzKA$ # 随机串,,秘钥
    H0ZnaiJOm/pI4K802Y2TcO5SQ7iWDcx5E+mb/hdABd8= #明文加密后的
    
# 后期如果你自己写了User表,但是想用人家的密码加密,就可以使用 
	-res=make_password('123456')
    -check_password(明文,密文)

到了这里,关于Auth模块的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker 安装 MongoDB开启认证,创建只读用户权限。

    docker run -itd --name mongo -p 27017:27017 mongo --auth --auth 就是开启mongodb权限认证。如果不加 --auth 则是无权限认证,连接成功后任何用户都可以对数据库进行读写操作。 docker run -itd  --name mongo -p 27017:27017 mongo --auth   docker exec -it mongo mongo admin   db.createUser({ user:\\\'admin\\\',pwd:\\\'123456\\\',roles:[

    2024年02月17日
    浏览(62)
  • EMQX HTTP Auth认证

    系统的安全性需要从身份认证、操作授权、黑名单机制、数据安全传输等几个方面去考虑,EMQX Broker的安全也是从这几方面考虑,下面分别介绍下EMQX安全特性。 身份验证是大多数应用程序的重要组成部分。MQTT 协议支持用户名/密码认证以及增强认证,例如 SASL/SCRAM 身份验证。

    2023年04月12日
    浏览(57)
  • Docker 中使用超级用户

    在docker中安装keytool产生的问题: docker exec -u 0 -it 容器名称或ID /bin/bash 例如: docker exec -u 0 -it d989639e3cb4 /bin/bash   然后直接使用apt,不需要加sudo apt-get update apt-get install -y openjdk-8-jre-headless

    2024年01月24日
    浏览(22)
  • Nginx进阶 配置-Nginx auth_basic 身份认证

    在公司前期投入研发时,尤其针对于ZF的客户,往往是很多需求含糊不清,可项目的里程碑节点已是板上定钉。在这种情况下,需求组应和研发组协同推敲,不断的制定计划、出demo,拿着我们推测出的构建想法及原型去征求客户的意见。 对于大屏、驾驶舱等可以前端先行的项

    2024年02月12日
    浏览(35)
  • 为kong网关添加key-auth插件实现安全认证

    官方指导文档:https://docs.konghq.com/gateway/latest/get-started/key-authentication/ 这里我们新建一个username=luka的用户 这一步我们看到kong给我们分配一个key:mZiuw2s2mJvFTbwhVx1zpYzFGaUbS2t1 1、启用key-auth插件 2、不带key进行请求 3、携带错误的key进行请求 4、使用正确的key进行请求 1、查看当前已

    2024年02月06日
    浏览(42)
  • 43.Django权限系统auth模块详解

    昨天我们为了登录admin,通过命令创建了超级用户,你是不是有个疑问——这创建的超级用户的信息是存放在哪里了呢?   这就想到了我们映射数据库时,Django自动创建的一些表(这也是之前进行数据库迁移时没有提到的那些表)!!!   如上图就是Django自带的auth系统对

    2023年04月08日
    浏览(36)
  • Django——Auth模块以及admin站点

    Auth 用户认证,本质上也是设置 Session。 在 django 迁移数据库的是时候会自动生成一个用户认证表:auth_user , 存放用户基本信息(用户名 , 密码,邮箱……) 重新配置 auth 认证模型类 实现验证登录,以及退出登录 django 提供的网站后台数据管理 创建管理员用户 注册的时候,

    2024年04月29日
    浏览(37)
  • Ubuntu22.04.1上 mosquitto安装及mosquitto-auth-plug 认证插件配置

    1、先上效果,可以根据mysql中mosquitto数据库的不同users角色登陆mosquitto: SELECT * FROM mosquitto.users; SELECT * FROM mosquitto.acls; 2、账号密码 123456

    2024年02月10日
    浏览(49)
  • Nginx ngx_http_auth_request_module模块鉴权

    ngx_http_auth_request_module 模块 实现了基于一子请求的结果的客户端的授权。如果子请求返回2xx响应码,则允许访问。如果它返回401或403,则访问被拒绝并显示相应的错误代码。子请求返回的任何其他响应代码都被认为是错误的。 auth_request 使用的也是 subrequest 进行子请求。 当我

    2024年02月17日
    浏览(58)
  • Django的django.contrib.auth.models模块中的AbstractUser类介绍。

    在Django框架中, django.contrib.auth.models 模块提供了用于身份验证和授权的相关功能。其中, AbstractUser 类是Django默认的用户模型(user model)的抽象基类。 AbstractUser 类提供了一些常见的用户相关字段和方法的默认实现,它可以作为创建自定义用户模型的基础。当你在Django项目中

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包