django的身份验证米德已经与框架本身合并,当我们启动时:
python manage.py迁移
允许用户管理的表被迁移。这解决了大部分会议工作,这是非常感谢的。
我们开始做吧
有一个抽象用户类,我们可以继承来生成自己的自定义用户并添加所需的字段。目前,我将在没有属性的情况下组装它,因此,如果将来我们需要向用户添加特殊信息,我们已经生成了类。
在Models.py中我声明新用户模型:
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
pass
然后在设置中。
AUTH_USER_MODEL = 'api.User'
迁移以及执行时,他告诉我:
ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'api.user', but app 'api' doesn't provide model 'user'.
The field api.Vote.user was declared with a lazy reference to 'api.user', but app 'api' doesn't provide model 'user'.
我需要声明投票,该投票具有用户的foraneo密钥,这是我的用户,而不是Django模块的键。问题是迁移已经与以前的关系进行了,因此不会将它们带到我身上。
我删除我的sqlite3.db文件并用迁移重新创建它,以便django了解与自定义用户的新关系。
auth token y auth用户
此时,我已经有一个个性化的用户,以及Django身份验证实施。现在,我将在Views.py上构建登录端点,并且将其与DRF随附的auth令牌组件相结合:
@api_view(['POST'])
def user_auth(request):
username = request.data.get('username')
password = request.data.get('password')
if not username or not password:
return Response({'error': 'Se debe indicar usuario y contraseña'}, status=status.HTTP_204_NO_CONTENT)
user = authenticate(request, username=username, password=password)
if user is None:
return Response({'error': 'El usuario o la contraseña son incorrectos'}, status=status.HTTP_400_BAD_REQUEST)
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key}, status=status.HTTP_200_OK)
然后我在urls.py上定义路线:
urlpatterns += [
path('auth', user_auth, name='api-auth')
]
to to我通过包含用户和密码的JSON通过“ Post/api/auth”访问的所有内容。
但是,我的观点对用户_auth做什么?低音进行以下操作:
- 请请求用户并通过。
- 如果这些值不存在,请返回错误。
- 然后,使用身份验证功能运行登录过程。
- 如果登录正确,请致电令牌模型的整个get_or_create,以前因导入 authtoken 。 。 迁移
- 最终返回这个令牌,这将帮助我们维持会话并告诉API。
我们将在Postman中尝试使用以前指示的路线,并具有这样的JSON机构:
{
"username": "admin",
"password": "123"
}
并将返回以下内容:
结论
也许令牌的身份验证似乎是不必要的,因为我们不将其应用于任何端点,但是在下一章中,他们会看到此简单字符串的功能,并且会影响我们的请求对象。
我们在接下来的!
中看到我们