【问题标题】:Token based Authentication using django + mongoengine使用 django + mongoengine 进行基于令牌的身份验证
【发布时间】:2017-02-23 11:27:09
【问题描述】:

我正在使用 mongoengine + django。我需要使用基于令牌的身份验证。我用谷歌搜索了很多,但找到了 django.contrib.auth。我在某个地方找到了 mongoengine.django.auth,但它对我不起作用。

这是我找到的link

可能是,我对这个问题投了反对票,但我的问题很简单。

Token-based Authentication using django+mongoengine. Most of them are using mysql but I have mongoengine.

如果无法实现此方案。请建议我其他可以实现目标的方法。

【问题讨论】:

  • 你在 django rest framework 或 simple django 中需要这个?
  • 使用简单的 django。

标签: django authentication mongoengine


【解决方案1】:

令牌认证

** 创建一个令牌集合

class MongoToken(Document):
    key = StringField(max_length=44)
    user = ReferenceField('**USERMODEL NAME**', required=True)
    created = DateTimeField()

    def __init__(self, *args, **values):
        super(MongoToken, self).__init__(*args, **values)
        # super().__init__(*args, **values)
        if not self.key:
            self.key = self.generate_key()

    def save(self, *args, **kwargs):
        if not self.id:
            self.created =  datetime.now()

        return super(MongoToken, self).save(*args, **kwargs)
        # return super().save(*args, **kwargs)

    def generate_key(self):
        return binascii.hexlify(os.urandom(22)).decode()

    @staticmethod
    def token_validator(token=None):
        token_user = MongoToken.objects.get(key=token)
        if token_user:
            user = get_document_or_404( **USERMODEL NAME**,id=str(token_user.user.id))
            return user
        else:
            return False    

    def __unicode__(self):
        return self.key

创建令牌:

[1]: token,created = MongoToken.objects.get_or_create(user=**user_object**)
[2]: user_token = token.key ### a12222dsdasdasd45787784546

Token Validation [ views.py ] [CBV]
[3]:

def post(self, request):
        user_token=request.QUERY_PARAMS['token']
        user_token = str(user_token)
        return_data = {}
        try:
            ### This query will return while it got success
            user = MongoToken.token_validator(token=user_token)

            return_data['status'] = 200
            return_data['message'] = 'success'
        except:
            return_data['status'] = 404
            return_data['message'] = "User Details not found"

【讨论】:

  • 我可以在 API 的“Authentication Header”中使用这个生成的令牌吗?
  • 我收到此错误 - AttributeError: 'QuerySet' object has no attribute 'get_or_create'
猜你喜欢
  • 1970-01-01
  • 2016-01-23
  • 2016-08-24
  • 2015-10-07
  • 2011-06-28
  • 2018-03-20
  • 1970-01-01
  • 2020-04-13
  • 2016-09-14
相关资源
最近更新 更多