Django - login_required 不重定向

问题描述 投票:0回答:10

我试图限制视图,除非登录完成。正在关注 tuts+plus django unchained 教程

然而,login_required 装饰器不知何故没有完成这项工作。我做错了什么?

views.py 中的部分(login_required 已导入)

@login_required
def story(request):
    if request.method == "POST":
        form = StoryForm(request.POST)
        if form.is_valid():
                form.save()
                return HttpResponseRedirect('/')
    else:
        form = StoryForm()
    return render(request, 'stories/story.html', {'form': form})

urls.py 中没有进行任何更改。所以我希望出现找不到/登录的错误。但不知怎的,这并没有发生。

settings.py 有 LOGIN_URL = "/login/"

python django django-forms
10个回答
5
投票

我不确定为什么会发生这种情况。但由于某些原因,在 chrome 中,默认故事视图打开时没有重定向到 /login,而在 Firefox 中则工作正常。我尝试清除 Chrome 中缓存的图像和文件,但没有帮助。

现在我只使用 Firefox 来完成它。


4
投票

通过 chrome DevTool -> Application -> Storage -> Cookies 清除页面 cookie 可以解决此问题。


2
投票

我也有同样的问题。我清除了 Chrome 缓存,但没有用。现在我在 Firefox 上运行它并且运行正确


1
投票

urls.py
中添加一个条目,如下所示:

(r'^login/$', 'login_view'),

或者您可以使用从

LOGIN_URL = "/login/"
中删除
settings.py
并使用:

@login_required(login_url='/login/')

在这两种情况下,您都必须将条目添加到 urls.py


1
投票

确保您的chrome浏览器已清除所有浏览数据,并始终注意时间范围选择,然后您将解决此问题。我也遇到了这个问题,使用Firefox运行良好后,我明白了。


1
投票

我能够通过使用与 login() 相同的方式导入的 logout() 函数来解决这个问题,并且基本上“清除”了我已登录用户的任何存在。

创建一个注销视图函数/url路由,运行应用程序并调用该url,然后您将无法再使用装饰器访问其他视图函数,除非再次登录。


1
投票

@login_required
替换为
@login_required(login_url='login/')
#'login/'
这里您需要调用您的特定登录函数名称。

从设置中删除您的

LOGIN_URL
并确保将其导入您的视图中
'from django.contrib.auth.decorators import login_required'


0
投票

或者,您只需在 Google Chrome 的

Incognito Window
中打开您的应用程序即可修复此错误。


0
投票

我遇到了同样的问题,我意识到浏览器将我识别为登录用户,因为我之前在管理页面中以管理员身份登录过。我退出了管理页面,login_required 装饰器工作正常。


0
投票

检查注销用户视图,注销(请求)应该在那里关闭所有会话。

def logoutUser(请求):

logout(request)

return redirect('login')
© www.soinside.com 2019 - 2024. All rights reserved.