标签: django-authentication

Django自定义身份验证后端需要输入密码吗?

以下是我的大学处理身份验证的方式:我们将用户重定向到网站,输入用户名和密码,然后使用用户名和在查询字符串中传递的登录密钥重定向回我们.当我们收回用户时,我们在大学的数据库中调用存储过程,该存储过程获取用户名,登录密钥和IP地址,并告诉我们这是否有效.

我有一个Django自定义身份验证后端设置来处理我们所有这一切的结束.我是否能够接受密码参数(因为我们实际上没有使用他们的密码),这会有什么不同吗?现在,我已将其设置为使用登录密钥作为密码参数.它是好的还是坏的,或者我不能改变这个,比如说,login_key而不是密码?

python authentication django django-authentication custom-backend

2
推荐指数
1
解决办法
1968
查看次数

Django:我如何使用md5密码列实现低级别登录,因为我从旧站点移植了我的用户表?

基本上,我现在有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加密,就像管理员一样吗?

django django-authentication

2
推荐指数
1
解决办法
1631
查看次数

结合使用django和旧版身份验证Cookie

我在自制python框架中有一个大型代码库。我将逐步将代码移至Django,但与此同时,需要支持通过旧系统登录。旧系统在用户登录后使用cookie来识别用户。

我不希望用户通过Django登录,但我确实希望能够使用@login_required以及依赖Django身份验证系统的多个应用程序,例如admin,django-tagging和django-comments。

集成两个身份验证系统的最佳方法是什么?这两个代码库都在同一个python进程中运行(通过可根据每个请求切换应用程序的wsgi中间件),并且可以根据需要相互加载模块。

django legacy-code django-authentication

2
推荐指数
1
解决办法
353
查看次数

Django:使用user.get_profile()

我有一个关于使用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() …

python django django-authentication

2
推荐指数
1
解决办法
4796
查看次数

是否可以更改 django_auth 中的哈希算法?

我有一个正在运行的 wiki 用户。现在我想在 Django 中编写一个应用程序来完成特定的任务。

我必须使用我的“旧”用户/组数据库(它有不同的密码散列算法,然后是 django_auth)并时不时地同步它,因为我的用户已经有一个登录名,在任何地方都必须相同。

我也想使用 django_auth。

是否可以更改 django_auth 中的哈希算法?

以便 django auth 使用我编写的函数来检查插入的密码是对还是错。

提前致谢,塞纳德。=)

django django-authentication

2
推荐指数
1
解决办法
1999
查看次数

AttributeError: 'Account' 对象没有属性 'is_staff'

我已经自定义了用户模型,这是模型:

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 django-authentication

2
推荐指数
1
解决办法
7565
查看次数

Django中的授权和身份验证有什么区别?

我在阅读Django文档时遇到了这两个术语,它们习惯于看似不同的含义.有什么不同?

python django django-authentication

2
推荐指数
1
解决办法
446
查看次数

用于用户创建的 DRF 序列化器嵌套字段

所以我有一个自定义模型 - 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

2
推荐指数
1
解决办法
1628
查看次数

没有用户模型的Django基于令牌的身份验证

我正在使用基于 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

2
推荐指数
3
解决办法
5767
查看次数

使用Rest API的Django密码休息

我们的团队在后端使用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.

django token django-authentication django-rest-framework

2
推荐指数
1
解决办法
3197
查看次数