我通过扩展默认的 ModelBackend 编写了一个自定义身份验证后端。是否可以将自定义错误消息发送到登录屏幕?截至目前,它显示的是默认消息。
我想知道如何告诉Django使用哪个身份验证后端,如果用户被标记为人员,或者他们不是.
可以这样做吗?
django django-models django-admin django-authentication python-2.7
我想我在这里遗漏了一些东西。我有一个django project(django 1.6,ubuntu box),里面有几个应用程序,我希望一个用户管理一个特定的应用程序。它应该很简单:选择用户,将他/她标记为is_staff并添加应用程序的权限。但这行不通。
重要的是要注意,我正在使用自定义Authentication Middleware来验证我们的SSO Server. 身份验证工作正常。权限不是。
在我的settings.py我有:
MIDDLEWARE_CLASSES = (
#[...]
'django.contrib.auth.middleware.AuthenticationMiddleware',
'middlewares.sso.SsoMiddleware', # My Custom Auth Middleware
'django.contrib.auth.backends.ModelBackend',
#[...]
)
Run Code Online (Sandbox Code Playgroud)
无论如何,我的问题是:
User表中;Admin Interface并将该用户标记为is_staff. 他已经被标记为is_active。Admin Interface.super_user,但当然他/她可以查看和更改所有应用程序,这不是我的目标。我有一种感觉,我的习惯Auth Middleware是罪魁祸首,但我不确定也不知道如何解决它。
任何帮助将不胜感激。
编辑 1:process_request() 代码:
我的 sso.middleware 上的 process_request() 函数:
def process_request(self, request):
if not hasattr(request, 'user'):
raise ImproperlyConfigured();
if "BBSSOToken" not in …Run Code Online (Sandbox Code Playgroud) 我正在使用 django-allauth 登录页面将用户登录到我的管理面板。这工作正常,但是当他们从管理面板注销时,我希望他们被直接发送回 /accounts/login/ 页面(最好是 /accounts/login/?next=/admin/surveys/survey/),而不是而不是 /admin/logout/ 页面,上面写着“感谢您在网站上度过了美好的时光。” 我在我的设置文件中尝试了 LOGOUT_URL 属性,但它似乎没有做我上面描述的事情。这是我的一些相关代码:
# urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
from mysite import views
from django.contrib import admin
admin.autodiscover()
from django.contrib.auth.decorators import login_required
admin.site.login = login_required(admin.site.login)
from django.contrib.auth import views as auth_views
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name='landingpage.html'), name='landingpage'),
url(r'^surveys/', include('surveys.urls', namespace="surveys")),
url(r'^admin/', include(admin.site.urls)),
url(r'^submitfeedback/$', views.submitfeedback, name='submitfeedback'),
# tried this but it didn't work: url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/accounts/login/'}),
# tried this but it didn't work: url(r'^admin/logout/$', …Run Code Online (Sandbox Code Playgroud) 我目前有一个 Django 应用程序,它只是一堆 REST API(当然由数据库支持)。我正在使用Django REST framework JWT管理我的身份验证。它工作正常。每当用户登录时,我的 API 之一都会返回一个令牌,消费应用程序存储该令牌以供以后使用。到现在为止还挺好。
但是,将来,此解决方案需要扩展。而不是让单个服务器运行 Django 应用程序,我可以预见我需要多个 Web 服务器的情况。当然,所有这些网络服务器都将连接到同一个数据库。但是由于令牌未存储在数据库中,这将如何与多个 Web 服务器一起使用?一台服务器发出的令牌在另一台服务器上无效。
那么其他人是如何解决这个问题的呢??
django rest restful-authentication django-authentication django-rest-framework
我需要在 Django 项目中使用“Role”这个词而不是“Group”。
我试过 i18n,但可以auth选择翻译。
我也尝试用django.contrib.auth一个叫做“角色”的myaqpp.auth地方替换Group。
进行此重命名的正确方法是什么?
我知道有类似的问题,我尝试了这些问题中提到的所有解决方案。这是我的问题描述;
当我执行 createsuperuser 时,出现如下错误;
AttributeError: 'Manager' object has no attribute 'get_by_natural_key'
Run Code Online (Sandbox Code Playgroud)
这是我在实现中定义 UserAccountManager 和 UserAccount 的方式;
from django.db import models
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
class UserAccountManager(BaseUserManager):
def create_user(self, email, first_name, last_name, password=None):
if not email:
raise ValueError('Email must be set!')
user = self.model(email=email, first_name=first_name, last_name=last_name)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, first_name, last_name, password):
user = self.create_user(email, first_name, last_name, password)
user.is_admin = True
user.save(using=self._db)
return user
def get_by_natural_key(self, email_):
return self.get(code_number=email_)
class UserAccount(AbstractBaseUser):
email = models.EmailField(unique=True)
first_name = …Run Code Online (Sandbox Code Playgroud) 我最近使用教程构建了一个基于Django的身份验证系统.在这个系统中,我在forms.py中创建了一个令牌.然后,该令牌在激活激活邮件中发送(作为链接).
from django.contrib.auth.tokens import default_token_generator
token = default_token_generator.make_token(user)
Run Code Online (Sandbox Code Playgroud)
接收get请求的视图与此链接中提供的标记和用户标识匹配,并使用以下命令检查标记:
default_token_generator.check_token(user, token)
Run Code Online (Sandbox Code Playgroud)
这将验证令牌是否通过我的网站发送.但我不明白这个过程.令牌是唯一的,但我似乎没有在某处保存令牌?那么如何check_token()验证令牌呢?
在我的 html 上,我可以使用以下语法检查用户是否已登录:
{% if user.is_authenticated %}
<div id="display_something">...</div>
{% else %}
<p>Please Log in</p>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想检查用户是否为我呈现的每个 html 文件进行了身份验证,我该怎么办?我是否必须{% if ... %}为每个 html 文件复制和粘贴该块?Django 处理这个问题的方式是什么?什么是好的做法?
在 Django 文档中,它用于User.objects.create_user()创建用户。我很困惑,是什么,之间的差异User.objects.create()以及User().save()它们是正常的方式来创建其他车型的对象