业务场景是这样的:有个未登录用户点击了一个需要登陆后才能进的链接,然后直接去到登陆页。登陆后就直接跳转到这个链接。
之前的js逻辑是用referer来获取触发地址,不过这样只能拿到所在页面的URL不是我要转进的地方。(有没有什么方法在不改变给后端提交的数据情况下得到我要跳过去的URL)
本人是后端方向的,js比较小白和初级。问题简单的话勿怪哈...
下面大神的回复都很好,在此谢谢啦。可能我描述的不够清楚吧。
1.举个例子,比如我在一个商品的详情页面,点击进入个人中心的我的订单(未登录状态)。
2.进入登录页,ajax各种验证(其中并没有传任何有关redirect信息),成功后。
3.旧逻辑是通过document.referrer获取转进的位置,重定向(但是这样有个问题就是获取的是详情页的URL,不是用户要去的我的订单处)。问题就在这
在不改变原有传参的情况下,是否可以单纯以前端来获取到目标地址?因为要对验证添加参数的话(不可能只有一个地方会做这样的操作的),会涉及到前端后端都要修改的情况,工作量相对会大一些。
假如在/a点击了需要登录的/u,那么后端发现未登录的时候,返回一个redirect到/login,URL附上参数
redirect=/u
,此时浏览器会再发送一个/login的请求,在这个页面登录成功的时候拿这个redirect参数重定向就行了。用户跳到登录页面时在url加上之前页面的url,这样在登录成功时跳转到之前页面的url即可。
点击需要登录用户才有权访问的页面A而当用户未登录或登录过期了(这个判断在后台处理),那么后台返回一个重定向的回复URL(redirect_URL)给浏览器,此时后台需要将页面A的URL作为参数附加在redirect_URL上
重定向的redirect_URL显示为一个登录页面(LOGIN)
登录页面(LOGIN)有2中处理方法
1.使用Ajax请求来验证登录,在得到验证成功的结果后,将附加在redirect_URL上的URL_页面A取出,在客户端执行页面重定向(window.href=URL_页面A)
2.不适用Ajax请求验证,使用常规的页面提交验证,后台验证成功后,返回一个重定向回复(重定向地址为URL_页面A)给浏览器,浏览器自动跳转重定向。
首先:你们的项目是前后端分离吗?
其次:前端用框架了吗?用的什么框架?
你的后端是什么语言?我实现这个功能的时候,完全在后台就完成了,java写的后端,就是在拦截器中实现。当未登录访问了需要登录才能查看的文案。就重定向到登录页面,并且保存下来拦截前的页面地址到session中,然后登录验证成功后,看session中,登录前地址是否存在不为空,不为空的话就跳转到该地址。
我的做法是将用户本来要进入的url记录在cookie中,然后让用户去做登录认证,认证成功后,如果发现cookie中指定了认证通过后去哪,就跳转到指定的url,否则跳转到缺省地址。