将某些用户帐户限制为Django中的某些IP

时间:2010-09-22 00:11:08

标签: django authentication ip-address

是否可以让用户在使用特定IP地址时登录?所有用户的IP地址都不同,因此在Apache中编写htaccess规则并不能解决我的问题。我还考虑编写自定义身份验证后端,但由于没有提供 request 变量,我没有看到任何方法可以检查用户的当前IP地址。

拥有此功能并非绝对关键,但它可能会很好。我只需要看看是否有可能在没有严厉破解Django的身份验证框架的情况下做到这一点。

谢谢, 科里

1 个答案:

答案 0 :(得分:4)

实际上很简单。

  1. 创建一个自定义身份验证后端,该后端将IP地址作为参数(如果您需要更多其他身份验证,则可以使用其他身份)。
  2. 创建自定义身份验证视图
  3. 视图示例:

    from django.contrib.auth import authenticate, login
    
    def login(request):
        user = authenticate(ip=request.META['REMOTE_ADDR'])
        if user is not None:
            login(request, user)
            # Redirect to a success page.
        else:
            # Return an 'invalid login' error message.
    

    auth后端示例:

    class IPAuthBackend:
        def authenticate(self, ip=None):
            try:
                return SomeModel.objects.get(ip=ip).user
            except SomeModel.DoesNotExist:
                pass