Django使用中间件实现用户登录功能出现重复跳转的问题及解决方法

先看一下出错的代码

# 中间件
class AuthMiddleware(MiddlewareMixin):
    
    def process_request(self, request):
        print(request.path)
        print(request.session.get('is_log'))
        if request.path != '/oa/login':
            if request.session.get('is_log'):
                return redirect('/oa/dashboard')
            else:
                return redirect('/oa/login')
        else:
            return

 

# view
class Login(View):
    def get(self, request):
        return render(request, 'website/signin.html')

    def post(self, request):
        res = {'status': 'succ'}
        user_name = request.POST.get("name", None)
        password = request.POST.get("password", None)
        re_log = request.POST.get("remember", None)
        if user_name == 'root' and password == '123':
            # 设置session
            request.session['user'] = user_name
            request.session['is_log'] = True
            # 如果选择记住状态则保持一周的session信息
            if re_log == 1:
                request.session.set_expiry(1209600)
            res['status'] = 'succ'
        else:
            res['status'] = '密码错误'
        return HttpResponse(json.dumps(res), content_type="application/json")


class Dashboard(View):
    def get(self, request):
        db = DataBase()
        data = db.dashboard()
        return render(request, 'website/dashboard.html', {'data': data})
       

访问效果:

登录成功之后一直出现重复的跳转问题。

我们在来重新审视一下代码:
首先我们登录成功之后访问/oa/dashboard这个页面,然后在中间间的处理过程中由于第一个if判断和第二个if判断都满足导致再次跳转到oa/dashboard页面一直重复。而且在访问其他页面的时候依然是一直跳转dashboard这个页面的,逻辑有误。

解决方法:在验证用户登录之后的session之后直接return掉而不是进行跳转。

class AuthMiddleware(MiddlewareMixin):

    def process_request(self, request):
        if request.path != '/oa/login':
            if request.session.get('is_log'):
                return
            else:
                return redirect('/oa/login')
        else:
            return

之前逻辑没看清,现在突然发现这个问题好傻逼
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值