django:如果用户是系统新手,则显示协议页面

时间:2013-11-05 21:41:31

标签: python django django-middleware

我正在使用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中创建记录

2 个答案:

答案 0 :(得分:1)

您只需使用view代替middleware即可。

由于usersystem的新用户,因此不会创建任何经过身份验证的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方法

Middleware process view