django身份验证和密码重置

时间:2018-06-19 10:51:36

标签: python django api authentication

所以,我目前正在开发一个Web应用程序项目,并成功实现了身份验证和密码确认。

  

但我的问题是我是使用html模板完成的,现在我们需要使用api来为后端开发我们的应用程序。

现在,我是api的新手并且真的很困惑如何使用我构建的身份验证系统(因为我们必须为内置的实现类提供模板,并且他们接受自己的值)

是否可以从代码隐藏中实际查看和管理注册用户,同时仍然使用内置机制

2 个答案:

答案 0 :(得分:2)

对于密码更改,您可以使用内置的Django auth框架

来使用此通用视图
@login_required
def change_password(request):
    if request.method == "POST":
        form = PasswordChangeForm(request.user, request.POST)
        if form.is_valid():
            user = form.save()
            # Important to update the session otherwise user will have to login again
            update_session_auth_hash(request, user)
            # Server side alert
            print("Password changed for {0}".format(user.username))
            return redirect('/index/')
        else:
            print(form.errors)
    else:
        form = PasswordChangeForm(request.user)
    return render(request, 'website/changepassword.html', {'form': form})

您需要使用djangorestframework,并使用装饰器@apiview(['GET', 'POST'])创建RestAPI

答案 1 :(得分:0)

您可以使用django rest框架中提供的TokenAuthentication。查看说明文件内容:

  

TokenAuthentication

此身份验证方案使用基于令牌的简单HTTP身份验证方案。令牌认证适用于客户端-服务器设置,例如本地台式机和移动客户端。

要使用TokenAuthentication方案,您需要配置身份验证类以包括TokenAuthentication,并在INSTALLED_APPS设置中另外包含rest_framework.authtoken:

INSTALLED_APPS = (
...
'rest_framework.authtoken'

注意:确保在更改设置后运行manage.py migration。 rest_framework.authtoken应用程序提供了Django数据库迁移。

您还需要为用户创建令牌。

from rest_framework.authtoken.models import Token

token = Token.objects.create(user=...)
print token.key

要使客户端进行身份验证,令牌密钥应包含在“授权HTTP”标头中。密钥应以字符串文字“ Token”作为前缀,并用空格分隔两个字符串。例如:

Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

注意:如果要在标头中使用其他关键字(例如Bearer),只需将TokenAuthentication子类化,然后设置关键字class变量即可。

如果成功通过身份验证,则TokenAuthentication将提供以下凭据。

  • request.user将是Django用户实例。
  • request.auth将是rest_framework.authtoken.models.Token实例。

被拒绝权限的未经身份验证的响应将导致带有适当的WWW-Authenticate标头的HTTP 401未经授权的响应。例如:

WWW-Authenticate: Token

curl命令行工具对于测试令牌身份验证的API可能很有用。例如:

curl -X GET http://127.0.0.1:8000/api/example/ -H 'Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b'

注意:如果您在生产中使用TokenAuthentication,则必须确保您的API仅可通过https使用。

来源:http://www.django-rest-framework.org/api-guide/authentication/#tokenauthentication