首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用tastypie时,客户端如何获取api-key?

在使用tastypie时,客户端如何获取api-key?
EN

Stack Overflow用户
提问于 2015-06-04 22:02:03
回答 1查看 335关注 0票数 1

我使用REST API的django-tastypie和身份验证的ApiKeyAuthentication。我在api.py中有一个用于创建新用户的CreateUserResource。现在,在所有教程中都指定了,无论何时完成任何GET或POST请求,都必须指定apikey。但是客户端如何接收这个apikey呢?

在登录时,客户端是否需要进行身份验证,并提供一个apikey,当客户端注销时该out将被撤销?

EN

回答 1

Stack Overflow用户

发布于 2017-03-21 19:25:23

在后台使用Tastypie实现单页app的基本鉴权:

  1. 允许用户输入用户名和密码,并将其发布到一个资源上,该资源仅用于处理用户authentication.
  2. Let此资源查找用户并对其进行身份验证,并作为响应发送“密钥”。前端的
    1. 捕获此"api密钥“并将其存储在本地存储中。
    2. 现在使用本地存储中的此"api密钥”,并将其作为标题发送到所有请求中。
    3. in前端捕获此"api密钥“并将其存储在本地存储中。
    4. 现在使用本地存储中的此”api密钥“并将其作为标题发送到所有请求中。现在,如果您的资源正在使用present.
    5. Once,它将给出错误,如果令牌无效或未注销用户,请从本地存储中删除密钥。ApiKeyAuthentication

此类身份验证资源可能如下所示:

代码语言:javascript
复制
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login
from tastypie.http import HttpUnauthorized, HttpForbidden, HttpNotFound
from tastypie.authentication import ApiKeyAuthentication
from django.conf.urls import url
from tastypie.resources import ModelResource
from tastypie.utils import trailing_slash

class AuthenticationResource(ModelResource):

    def __get_api_key_for_user(self, user):
        return '%s' % (user.api_key.key)

    class Meta:
        resource_name = 'authentication'

    def prepend_urls(self):
        return [
            url(r"^(?P<resource_name>%s)/login%s$" %
                (self._meta.resource_name, trailing_slash()),
                self.wrap_view('login'), name="api_login"),
        ]


    def login(self, request, **kwargs):
        self.method_check(request, allowed=['post'])
        data = self.deserialize(request, request.body, format=request.META.get('CONTENT_TYPE', 'application/json'))
        username = data.get('username', '')
        password = data.get('password', '')
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                last_login = user.last_login
                login(request, user) // updates the last login
                return self.create_response(request, {
                    'api_key': self.__get_api_key_for_user(user),
                    'last_login': last_login,
                    'username': username
                    })
            else:
                return self.create_response(request, {
                    'success': False,
                    'reason': 'disabled',
                    }, HttpForbidden )
        else:
            return self.create_response(request, {
                'success': False,
                'reason': 'Incorrect user name or password',
                }, HttpUnauthorized )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30645943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档