0

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

4

2 回答 2

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在您看来,这应该完成。

于 2013-11-05T22:13:16.483 回答
1

好吧,如果你想改变视图,process_view中间件框架中有一个方法

中间件进程视图

于 2013-11-05T22:15:36.237 回答