BasicAuthentication:基础验证,通过用户名和密码验证
SessionAuthentication:使用django的session验证
可设置多个验证方式,有一个通过即可。验证通过后request.user会是对应User实例
光设置验证是没用的,还的设置权限。才能起到必须登录才能操作。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
),
}
单独配置:
authentication_classes = []
permission_classes = [AllowAny]
也可以单独使用,可以覆盖全局配置。比如注册,登录肯定不需要进行验证。
需要在INSTALLED_APPS和MIDDLEWARE中进行配置。然后使用python manage.py migrate创建数据库表,默认是使用数据库保存session。
login_info = {
"username": data.get("username"),
"password": data.get("password"),
}
try:
user = authenticate(**login_info)
if user is not None:
login(request, user)
使用authenticate()校验用户名密码,使用login()方法创建session。
Django_session表会增加一条该用户的session记录
使用SessionAuthentication可能会提示“detail“: “CSRF Failed: CSRF token missing.” DRF默认是启用CSRF的。
from django.utils.deprecation import MiddlewareMixin
class NotUseCsrfTokenMiddlewareMixin(MiddlewareMixin):
def process_request(self, request):
setattr(request, '_dont_enforce_csrf_checks', True)
logout(request)
需要在INSTALLED_APPS中注册,然后执行python manage.py migrate
login_info = {
"username": data.get("username"),
"password": data.get("password"),
}
try:
user = authenticate(**login_info)
if user is not None:
login(request, user)
token, created = Token.objects.get_or_create(user=user)
return SuccessResponse(data={"token": token.key})
except Exception as e:
return ErrorResponse(msg=str(e))
token, created = Token.objects.get_or_create(user=user)
authtoken_token表会增加一条该用户的token记录
在请求头中使用Authorization参数,Token后要空两格再跟上具体值
def post(self, request):
try:
Token.objects.filter(user=request.user).delete()
logout(request)
except ObjectDoesNotExist as e:
return ErrorResponse(msg=str(e))
return SuccessResponse()
退出登录,直接将token删除即可,如果同时使用session。删除session的操作需要放在删除token后面?(放前面会报错,不知道是不是都这样,还是我的代码会这样)
原文地址:https://blog.csdn.net/a54288447/article/details/126646278
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_46030.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!