标签: django-rest-auth

RuntimeError:模型类django.contrib.sites.models.Site未声明显式的app_label,并且不在INSTALLED_APPS的应用程序中

我正在使用Django Rest Framework和AngularJs构建一个应用程序.我使用Django-rest-auth进行身份验证,但是,我无法进行设置.无论如何,我试图用我的项目设置这个应用程序.我意识到我需要安装django-rest-auth-registration才能让它运行,所以我按照这个文档做了以下事情:

我跑了命令

pip install django-rest-auth

pip install django-allauth

任何我的settings.py看起来像这样:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # 3rd party apps
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    'allauth',
    'allauth.account',
    'rest_auth.registration',

    # My app
    'myapp',
]
Run Code Online (Sandbox Code Playgroud)

我还添加了身份验证后端,context_processors和正确的URL.

但是,当我尝试迁移时,我的终端会抛出以下错误:

RuntimeError:模型类django.contrib.sites.models.Site不声明显式的app_label,也不在INSTALLED_APPS的应用程序中.

为什么我会收到此错误,如何解决此问题以迁移我的项目?谢谢!

django django-rest-framework django-rest-auth

54
推荐指数
2
解决办法
6万
查看次数

Django rest-auth allauth注册电子邮件,名字和姓氏,没有用户名

我正在使用django-rest-auth和allauth在我的django应用程序中登录和注册.我没有为登录或注册编写任何额外的单行代码.使用emailid和提供的密码注册成功.

我不使用用户名进行身份验证,而是使用电子邮件

在我可浏览的注册api中,我得到以下内容:

在此输入图像描述

除了这些字段,我想要first_name和last_name(默认的auth_user表有这些列),这样我新创建的auth_user也会设置这些字段以及电子邮件和散列密码.

我怎样才能做到这一点?这个可浏览的表单本身并不那么重要,但能够存储first_name和last_name是我主要需要的.

django django-rest-framework django-allauth django-rest-auth

20
推荐指数
3
解决办法
6285
查看次数

django-rest-auth:谷歌社交登录

django-rest-auth文档讨论了Facebook集成,我对此并不感兴趣 - 我关注的是通过Google提供社交登录.我已经尝试了很长一段时间了,我想知道是否有其他人有关于他们如何做到这一点的任何文件...即使只是粗略的草图也会有所帮助.到目前为止,我还没有找到任何搜索结果.我几乎在那里,但无法使用Django休息框架(DRF)可浏览的API.

以下是我到目前为止的内容:我从django-rest-auth github页面上提供的演示项目开始,修改了社交登录模板HTML页面,只需要'代码'输入,而不是'代码'和'access_token' .当我提供有效的代码(通过单独的请求获得google的auth端点)时,这很好用; 可浏览的API在响应中使用"密钥"(我的应用程序的用户API令牌)呈现通常的网页.检查django管理员,一切正常 - 用户已登录,电子邮件已通过身份验证等.目前为止很好.

问题在于提供"代码"的起点 - 以及我如何从谷歌首先获得该代码.当我以前(成功)使用allauth包时,我只需单击一个链接,该链接将"无形地"执行整个OAuth2流程(即请求代码,使用该代码获取访问令牌,并使用访问令牌获取用户的谷歌帐户信息).

为了重新创建无缝流(即不从代码开始),我想我可以中断OAuth2流并"拦截"从谷歌返回的代码,然后将该代码发布到rest-auth社交登录API.为此,我allauth.socialaccount.providers.oauth2.views.OAuth2CallbackView通过覆盖调度方法创建了一个自定义:

class CustomOAuth2CallbackView(OAuth2CallbackView):
    def dispatch(self, request):
        # gets the code correctly:
        code = request.GET['code']

        # rp is of type requests.methods.Response
        rp = requests.post(<REST-AUTH API ENDPOINT>, data = {'code':code})
        return rp
Run Code Online (Sandbox Code Playgroud)

通常,当谷歌向您最初提供给谷歌的auth端点的回调uri发送GET请求时,会调用此方法.通过此覆盖,我能够成功解析在该回调中从谷歌返回的代码.POST请求有效并且在resp._content字段中具有用户密钥.但是,它最终无法在DRF可浏览API中生成预期视图.

基于在callstack中潜入,我发现rest_framework.views.APIView.dispatch返回一个类型的对象rest_framework.response.Response.但是,当requests.post上面使用的方法完成时,它返回一个类型的实例requests.models.Response.因此,它没有正确的属性,并且在django中间件中失败.例如,它没有acceptable_renderer属性,也没有'get'方法(用于django.middleware.clickjacking.py).可以想象,我可以将这些要求添加到requests.models.Response(rp)实例中,但随后这个黑客变得更加困难.

感谢您的任何帮助,您可以提供!

authentication django django-rest-auth

13
推荐指数
1
解决办法
2891
查看次数

令牌认证在django rest框架中的生产中不起作用

我有这个奇怪的问题,我找不到原因.我使用django 1.7和django rest框架和用于api身份验证的令牌身份验证来构建API.所有在本地主机上工作正常,但是当我尝试调用需要在生产计算机上进行身份验证的API端点时,我将获得403状态代码以及以下消息:{"detail":"未提供身份验证凭据". }.我做错了什么?

我按照文档在标题中发送令牌.以下是我的设置文件的外观:

INSTALLED APPLICATIONS = (
    '......',
    'rest_framework',
    'rest_framework.authtoken',
    'rest_framework_swagger',
    'corsheaders',
    '......')

MIDDLEWARE_CLASSES = (
    'corsheaders.middleware.CorsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.admindocs.middleware.XViewMiddleware',
    'django.middleware.common.CommonMiddleware',
    'admin_reorder.middleware.ModelAdminReorder',
)

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.AllowAny'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    ),
    'PAGINATE_BY_PARAM': 'page_size',
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'DEFAULT_FILTER_BACKENDS': ('rest_framework.filters.DjangoFilterBackend',),
    'VIEW_DESCRIPTION_FUNCTION': 'rest_framework_swagger.views.get_restructuredtext'
}

REST_SESSION_LOGIN = False
CORS_ORIGIN_ALLOW_ALL = True
Run Code Online (Sandbox Code Playgroud)

python authentication django django-rest-framework django-rest-auth

10
推荐指数
1
解决办法
1796
查看次数

如何在注册时使django-rest-framework-jwt返回令牌?

我有一个基本的django休息服务,其中

  1. 注册一个人和
  2. 更新他的密码.

我想在它上面添加jwt身份验证.如果我按照教程操作,我需要在项目的urls.py中添加一个名为"api-token-auth"的新URL.但是,我不想添加这个新的url,并希望我的注册调用发送一个令牌作为响应.

这是我的代码:

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    def create(self, validated_data):
        user = User(
            username=validated_data['username']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

    def update(self, instance, validated_data):
        instance.set_password(validated_data['password'])
        instance.save()
        return instance

    class Meta:
        model = User
        fields = ('url', 'username', 'password')
        lookup_field = 'username'
        write_only_fields = ('password',)
Run Code Online (Sandbox Code Playgroud)

views.py

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    queryset = User.objects.exclude(is_superuser=1)
    serializer_class = UserSerializer
    lookup_field = 'username'
Run Code Online (Sandbox Code Playgroud)
  1. 要做到这一点应该怎么做?我应该在序列化程序的create方法中调用api-auth-token吗?
  2. django-rest-framework-jwt如何处理多个身份验证令牌并正确识别哪个令牌属于哪个用户?特别是当它不在db中存储令牌时.
  3. 如何使用此身份验证机制限制用户仅查看/更新/删除其用户?
  4. 我如何使用此身份验证机制来执行任何操作.例如,如果用户想要将他的名字写入/tmp/abcd.txt.如何确保只有经过身份验证的用户才能这样做?
  5. 这种方法是否存在潜在的漏洞.如果我的应用程序要存储大量分类数据,我应该使用相同的代码吗?

python authentication django django-registration django-rest-auth

10
推荐指数
2
解决办法
9343
查看次数

Django休息auth电子邮件而不是用户名

我有一个django项目,我在其中使用Django-rest-auth进行身份验证.我想使用带密码的电子邮件来验证用户身份,而不是用户名+密码.

我在settings.py中有以下设置,但它对我没有任何作用:

REST_SESSION_LOGIN = True
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_AUTHENTICATION_METHOD = 'EMAIL'
ACCOUNT_EMAIL_VERIFICATION = 'optional'
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现它?

python django django-rest-framework django-allauth django-rest-auth

10
推荐指数
2
解决办法
5385
查看次数

Django rest-auth 中的 create 和 perform_create 方法有什么区别

我正在使用 Djangorest-auth包。我有一个扩展rest-auth's的类,RegisterView它包含两个方法,createperform_create. 这两种方法有什么区别?

python django django-rest-auth

10
推荐指数
1
解决办法
7188
查看次数

Django-allauth检索头像个人资料图片

我使用django-rest-authdjango-allauth利用用户的Facebook的个人资料有关用户注册/登录.

现在,我可以从Facebook获取一些标准信息(默认为所有auth).

是否可以检索头像图片列表?如何在allAuth中成功?

django facebook-graph-api django-allauth django-rest-auth

9
推荐指数
2
解决办法
2873
查看次数

Django-rest-auth使用cookie代替Authorization标头

我想使用Django Rest Framework作为后端来构建SPA应用程序。该应用程序将使用令牌身份验证。

为了获得最大的安全性,我想将身份验证令牌存储在httpOnly cookie中,因此无法从javascript访问它。但是,由于无法从javascript访问cookie,因此无法设置“ Authorization:Token ...”标头。

因此,我的问题是,我可以使DRF身份验证系统(或Django-Rest-Knox / Django-Rest-JWT)从Cookie中读取身份验证令牌,而不是从“ Authorization”标头中读取身份验证令牌吗?还是“授权”标头是在DRF中进行身份验证的唯一正确方法?

django cookies django-rest-framework django-rest-auth django-rest-framework-jwt

8
推荐指数
1
解决办法
806
查看次数

django rest auth用于登录的facebook代码

在项目上,我使用django-rest-auth进行用户注册和身份验证。我也为Facebook登录添加了代码:

from allauth.socialaccount.providers.facebook.views import FacebookOAuth2Adapter
from rest_auth.registration.views import SocialLoginView

class FacebookOAuth2AdapterFixed(FacebookOAuth2Adapter):

    def __init__(self):
        pass


class FacebookLogin(SocialLoginView):
    adapter_class = FacebookOAuth2Adapter
Run Code Online (Sandbox Code Playgroud)

然后在我的项目urls.py中添加

url(r'^rest-auth/facebook/$', FacebookLogin.as_view(), name='fb_login'),
Run Code Online (Sandbox Code Playgroud)

但是在url localhost:8000 / rest-auth / facebook上,我看到带有2个参数的表单:访问令牌(已经有)和代码。 在此处输入图片说明 接下来的问题是:如果没有此代码,我可以通过Facebook登录吗?如果没有,如何在没有前端的情况下获取此代码?如何检查工作用户的身份验证/注册?PS:创建了SocialApp,创建了Facebook应用,将应用ID和应用秘密添加到了社交应用中。

python django facebook django-rest-auth

7
推荐指数
1
解决办法
1790
查看次数