我正在使用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-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
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)实例中,但随后这个黑客变得更加困难.
感谢您的任何帮助,您可以提供!
我有这个奇怪的问题,我找不到原因.我使用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
我有一个基本的django休息服务,其中
我想在它上面添加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)
python authentication django django-registration django-rest-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
我正在使用 Djangorest-auth包。我有一个扩展rest-auth's的类,RegisterView它包含两个方法,create和perform_create. 这两种方法有什么区别?
我使用django-rest-auth和django-allauth利用用户的Facebook的个人资料有关用户注册/登录.
现在,我可以从Facebook获取一些标准信息(默认为所有auth).
是否可以检索头像图片列表?如何在allAuth中成功?
我想使用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
在项目上,我使用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和应用秘密添加到了社交应用中。