以下是我的大学处理身份验证的方式:我们将用户重定向到网站,输入用户名和密码,然后使用用户名和在查询字符串中传递的登录密钥重定向回我们.当我们收回用户时,我们在大学的数据库中调用存储过程,该存储过程获取用户名,登录密钥和IP地址,并告诉我们这是否有效.
我有一个Django自定义身份验证后端设置来处理我们所有这一切的结束.我是否能够接受密码参数(因为我们实际上没有使用他们的密码),这会有什么不同吗?现在,我已将其设置为使用登录密钥作为密码参数.它是好的还是坏的,或者我不能改变这个,比如说,login_key而不是密码?
python authentication django django-authentication custom-backend
基本上,我现在有login/在urls.py重定向到django.contrib.auth.views.login这似乎迎刃而解.
但是我正在移植来自遗留mysql/php网站的密码,我相信我应该根据http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information创建一个新的模型配置文件.- 关于用户.这个新的模型/表将具有旧的md5密码列,我将把用户名移植到主用户表.
如何更改登录方法,以便我首先检查用户是否在auth_user表中有密码,如果没有,则md5 POST password字段并尝试将其与我的新配置文件密码列匹配,如果是,则将密码保存在新的auth_user表格由SHA1加密,就像管理员一样吗?
我在自制python框架中有一个大型代码库。我将逐步将代码移至Django,但与此同时,需要支持通过旧系统登录。旧系统在用户登录后使用cookie来识别用户。
我不希望用户通过Django登录,但我确实希望能够使用@login_required以及依赖Django身份验证系统的多个应用程序,例如admin,django-tagging和django-comments。
集成两个身份验证系统的最佳方法是什么?这两个代码库都在同一个python进程中运行(通过可根据每个请求切换应用程序的wsgi中间件),并且可以根据需要相互加载模块。
我有一个关于使用django auth的新手问题.这是我的模型:
class UserProfile(models.Model):
""" Main user profile used on a website """
user = models.ForeignKey(User, unique=True) # reference to built in django user
display_name = models.CharField(max_length=100, blank=True)
# and several more fields
class Post(models.Model):
""" Blog entry """
author = models.ForeignKey(User)
tags = models.ManyToManyField(Tag)
title = models.CharField(max_length=255)
text = models.TextField()
Run Code Online (Sandbox Code Playgroud)
麻烦来了,当我想输出帖子列表时:
#view
posts = Post.objects.all()
#template
{% for post in posts %}
{{ post.title }} by {{ post.author.get_profile.display_name }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
对于100个帖子,这提供了101个查询,因为每个查询都get_profile()进入数据库以获取该display_name字段.
有没有办法来解决这个问题?我可以使用select_related() …
我有一个正在运行的 wiki 用户。现在我想在 Django 中编写一个应用程序来完成特定的任务。
我必须使用我的“旧”用户/组数据库(它有不同的密码散列算法,然后是 django_auth)并时不时地同步它,因为我的用户已经有一个登录名,在任何地方都必须相同。
我也想使用 django_auth。
是否可以更改 django_auth 中的哈希算法?
以便 django auth 使用我编写的函数来检查插入的密码是对还是错。
提前致谢,塞纳德。=)
我已经自定义了用户模型,这是模型:
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.contrib.auth.models import BaseUserManager
class AccountManager(BaseUserManager):
def create_user(self, username=None, password=None, **kwargs):
account = self.model(username=username)
account.set_password(password)
account.is_stuff = False
account.save()
return account
def create_superuser(self, username, password, **kwargs):
account = self.create_user(username, password, **kwargs)
account.is_admin = True
account.is_staff = True
account.save()
return account
class Account(AbstractBaseUser):
username = models.CharField(max_length=40, unique=True)
is_admin = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
initialized = models.BooleanField(default=False)
USERNAME_FIELD = 'username'
objects = AccountManager()
Run Code Online (Sandbox Code Playgroud)
然后当我尝试获取它抛出的所有用户的列表时AttributeError: 'Account' object has no attribute …
我在阅读Django文档时遇到了这两个术语,它们习惯于看似不同的含义.有什么不同?
所以我有一个自定义模型 - Profile,它与 django User 对象具有 OneToOne 关系。
class Profile(models.Model):
user = OneToOneField(User, on_delete=models.CASCADE)
profile_type = models.CharField()
Run Code Online (Sandbox Code Playgroud)
我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及“profile_type”属性。
我希望在 POST 请求中指定的名称就像“用户名”、“密码”、“电子邮件”等一样 - 而不是“profile_username”、“profile_password”……
到目前为止我有
class ProfileSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='profile_user_username')
password = serializers.CharField(source='profile_user_password')
email = serializers.CharField(source='profile_user_email')
class Meta:
model = Profile
fields = ('id',
'profile_user_username', 'profile_user_password', 'profile_user_email',
'username',
'password',
'email')
depth = 2
Run Code Online (Sandbox Code Playgroud)
但是 - 我遇到了一个错误:
ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile'
Run Code Online (Sandbox Code Playgroud)
我是否得到了嵌套字段的语法错误?或者是别的什么?
django django-models django-authentication django-serializer django-rest-framework
我正在使用基于 Django 令牌的身份验证。(JWT Token 由 AWS Cognito 等第三方服务生成,我们将仅验证签名和到期时间)。
这个 REST 应用程序将没有任何用户模型,使用 API 调用的人只需要通过 JWT 令牌进行身份验证。
class JSONWebTokenAuthentication(TokenAuthentication):
def authenticate_credentials(self, jwtToken):
try:
payload = jwt.decode(jwtToken, secret_key,verify=True)
# user = User.objects.get(username='root')
user = AnonymousUser()
except (jwt.DecodeError, User.DoesNotExist):
raise exceptions.AuthenticationFailed('Invalid token')
except jwt.ExpiredSignatureError:
raise exceptions.AuthenticationFailed('Token has expired')
return (user, payload)
Run Code Online (Sandbox Code Playgroud)
在视图中:
@api_view(["POST"])
@authentication_classes((JSONWebTokenAuthentication,))
@permission_classes((AllowAny,))
Run Code Online (Sandbox Code Playgroud)
上述过程根本没有跟踪Token。有/没有令牌,API 调用正在工作。如果我进行以下两项更改,则它正在工作。
user = User.objects.get(username='root')
#user = AnonymousUser()
@permission_classes((IsAuthenticated,))
Run Code Online (Sandbox Code Playgroud)
一种方法是,在我的应用程序中至少有一个用户并引用该用户[此网络应用程序可能会在需要时扩展到任意数量的实例,因此必须自动插入具有相同“用户名”的同一用户。]。但是,我可以消除身份验证中的“用户”概念吗?
django django-authentication jwt django-rest-framework pyjwt
我们的团队在后端使用django-rest-api,在前端使用angular-2.我们有密码重置问题.这里的网址是:
from django.contrib.auth import views as auth_views
urlpatterns = patterns(
'',
url(r'^password_reset/$', auth_views.password_reset, name='password_reset'),
url(r'^password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'),
url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',auth_views.password_reset_confirm, name='password_reset_confirm'),
url(r'^reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'),
)
Run Code Online (Sandbox Code Playgroud)
当发布对password_reset的请求时,用户会收到包含密码重置令牌的链接的电子邮件.令牌应在24小时内到期.
想要密码重置api,所以我们可以使用邮递员更改密码,前端开发人员也可以使用这个api.