django - 如何登录? Django TastyPie with ApiKeyAuthentication 实际认证过程

标签 django authentication login tastypie

我有一个 Adob​​e Air 移动应用程序,它通过 TastyPie 与 Django 进行通信。要使用该应用程序,人们必须先注册。因此,他们必须提供他们的电子邮件和密码。之后,他们将能够“登录”。我认为最好的办法是在输入成功的用户名/密码组合后,api-key 将被发送回移动应用程序,在那里它会被缓存,这样用户就被“登录”了。

如果您认为注册和“登录”用户有更好的方法,请告诉我。

在 Django 中,我有一个 UserRessource 类,用于在通过 POST 发送数据时注册新用户:

class UserResource(ModelResource):
    class Meta:
        allowed_methods = ['get', 'post']
        queryset = User.objects.all()
        resource_name = 'auth'
        authentication = Authentication()
        authorization = Authorization()
        fields = ['username', 'email']

    def obj_create(self, bundle, request=None, **kwargs):
        username, email, password = bundle.data['username'], bundle.data['password'], bundle.data['password'], 
        try:
            bundle.obj = User.objects.create_user(username, email, password)
        except IntegrityError:
            raise BadRequest('That username already exists')
        return bundle

这很好用。

但是现在我正在为实际的登录过程而苦苦挣扎。在我看来,最好通过 GET(和 https)将用户名和密码发送到此资源,如果这些有效,则返回用户 api key 。但这可能吗?而且干净吗?如果您向该资源发送 GET 请求,通常 TastyPie 会显示当前在数据库中的所有用户。但我不需要那些数据,所以我可以以某种方式覆盖它。我已经查过了 http://django-tastypie.readthedocs.org/en/v0.9.9/resources.html但我没有让它工作。甚至有可能覆盖这种行为吗?

所以实际问题是使用 ApiKeyAuthentication“登录”用户的最佳方式是什么?
我的方法是正确和干净的还是你有更好的方法? 你有这个案例的例子吗?

非常感谢!

最佳答案

我正在使用 BasicAuth,所以它可能略有不同。但我的解决方案基本上是一个需要身份验证的空资源。如果身份验证成功,服务将返回响应代码 200 和经过身份验证的用户,我会覆盖 obj_get_list 并将经过身份验证的用户填入其中。如果凭据错误,服务将返回响应代码 401。

 class LoginResource(ModelResource):
        class Meta:
            allowed_methods = ['get']
            resource_name = 'login'
            include_resource_uri = False
            object_class = User
            authentication = BasicAuthentication()
            authorization = DjangoAuthorization()

        def obj_get_list(self, bundle, **kwargs):
            return [bundle.request.user]

关于django - 如何登录? Django TastyPie with ApiKeyAuthentication 实际认证过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12296416/

相关文章:

php - React前端服务器和PHP/Symfony后端服务器之间共享 session

ios - 在 iOS 上没有登录的 OAuth 2.0?

django - 如何设置 Django 应用程序以使 cookie 在子域上工作

django Rest框架并对 native 用户身份验证与未定义的响应使用react

python - Django 错误配置 : WSGI application 'myproject.wsgi.application' could not be loaded; Error importing module

python - 如何使用 python 使用 oauth2 获取 Github api 的访问 token

python - 在不使用 Django 本身的情况下测试自定义 Django 中间件

angular - 类型错误 : Cannot read property 'length' of undefined (Angular 8)(header)

authentication - 如果设置为 "Remember Me",如何更新上次登录日期?