在我的所有氮页面中,我使用以下语义:
main() ->
case wf:user() /= undefined of
true -> main_authorized();
false -> wf:redirect_to_login("/login")
end.
当用户登录并且在包含表单的页面中,如果会话超时,他仍然可以执行表单发布,导致我的网站逻辑出现一些问题,因为未记录的用户应该重定向到登录页面,是否有任何问题我可以实现这种行为,而不必经历我的所有页面事件功能,并寻找这种情况?
提前致谢并问候
答案 0 :(得分:4)
Nitrogen为应用程序开发人员提供了定义和设置授权回调模块的能力。
您可以定义一个授权处理程序,而不是您在每个页面处理程序中描述的main/0
逻辑,就像我在二月份写的以下Gist一样:
https://gist.github.com/830529
您定义的init/2
回调模块中的security_handler
函数(假设您在启动时使用nitrogen:handler/2
将其挂钩)将在页面中的main/0
函数之前执行处理程序。
为确保不执行POST页面处理程序的任何部分,您应该以401为参数调用wf:status_code/1
。然后根据您的Web服务器配置,在401响应中指定相应的登录页面。