我正在使用django构建应用程序,我使用单点登录系统作为我的身份验证系统。我想确保用户是否从未访问过网站,这意味着如果我在创建记录之前没有记录在我的表中显示协议页面,如果用户拒绝,则不要将用户登录到系统。
如何从中间件访问视图以获得协议(是/否)
try:
shib_user = ShibUser.objects.get(shib_username=username)
user = shib_user.auth_user
user.backend = "django.contrib.auth.backends.RemoteUserBackend"
except ObjectDoesNotExist:
# I think this is where I should be calling my view?
user = auth.authenticate(remote_user=username)
user.shibuser_set.create(shib_username=username, shib_user_role=shib_uRole)
基本流程应该是用户点击登录链接 - >检查此用户是否已存在于我的auth_table中(如果用户存在,这意味着用户已经看到协议,如果没有显示协议,并且是否同意在auth_user中创建记录
答案 0 :(得分:1)
您只需使用view
代替middleware
即可。
由于user
是system
的新用户,因此不会创建任何经过身份验证的session
。
当用户到达网站时,向他显示协议表格。当他同意协议时,您现在可以开始创建authenticated session
对象。这将存储为cookie。
现在,您可以检查session
是否使用以下身份进行身份验证:
>> if request.user.is_authenticated():
# show him the system
else:
# redirect him to some different template
这应该在main
视图中完成。
答案 1 :(得分:1)
好吧,如果你想改变视图,中间件框架中有一个process_view
方法