Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中将某些用户帐户限制为某些IP_Django_Authentication_Ip Address - Fatal编程技术网

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

在Django中将某些用户帐户限制为某些IP,django,authentication,ip-address,Django,Authentication,Ip Address,在使用特定IP地址时,是否可以只允许用户登录?这个IP地址对于所有用户都是不同的,所以简单地在Apache中编写htaccess规则并不能解决我的问题。我还研究了编写一个自定义身份验证后端,但我看不到任何方法可以检查用户的当前IP地址,因为没有提供请求变量 拥有这个特性并不是绝对重要的,但它可能很好。我只需要看看是否有可能不严重破坏Django的身份验证框架 谢谢, 其实很简单 创建一个自定义身份验证后端,该后端将IP地址作为参数(如果您需要更多的IP地址进行身份验证,还可以创建其他参数) 创建

在使用特定IP地址时,是否可以只允许用户登录?这个IP地址对于所有用户都是不同的,所以简单地在Apache中编写htaccess规则并不能解决我的问题。我还研究了编写一个自定义身份验证后端,但我看不到任何方法可以检查用户的当前IP地址,因为没有提供请求变量

拥有这个特性并不是绝对重要的,但它可能很好。我只需要看看是否有可能不严重破坏Django的身份验证框架

谢谢,
其实很简单

  • 创建一个自定义身份验证后端,该后端将IP地址作为参数(如果您需要更多的IP地址进行身份验证,还可以创建其他参数)
  • 创建自定义身份验证视图
  • 视图示例:

    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.
    
    验证后端的示例:

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

    其实很简单

  • 创建一个自定义身份验证后端,该后端将IP地址作为参数(如果您需要更多的IP地址进行身份验证,还可以创建其他参数)
  • 创建自定义身份验证视图
  • 视图示例:

    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.
    
    验证后端的示例:

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

    谢谢你的回答。我太习惯使用内置的登录视图了,我没有意识到这是可能的。谢谢你的回答。我太习惯于使用内置的登录视图,我没有意识到这是一种可能性。