【发布时间】:2018-11-25 04:24:50
【问题描述】:
我有一个触发 Ajax Post 的 Like 按钮,该路由受 auth:api 中间件保护:
我的项目/路由/api.php
Route::group(['middleware' => ['auth:api']], function () {
Route::post('/v1/like', 'APIController@set_like');
});
当一个经过身份验证的用户点击like按钮时,一点问题都没有,一切都很顺利。但是当客人点击按钮时,我通过 Javascript 将他们重定向到登录页面,并且在身份验证后,他们被重定向到 RedirectIfAuthenticated 中间件中指定的页面,因此通常是 /home。 我对该中间件进行了如下修改:
myproject/app/Http/Middleware/RedirectIfAuthenticated.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect()->intended('/home');
}
return $next($request);
}
}
我的 Ajax 调用是这样的:
var toggleLike = function(){
var token = USER_TOKEN; //javascript variable
var current_type = $(thisLikeable).attr("data-type");
var current_id = $(thisLikeable).attr("data-id");
var jqxhr = $.post( APP_URL + "/api/v1/like", {api_token: token, type: current_type, id: current_id}, function(data) {
setLikeAppearance(data.message);
})
.fail(function(xhr, status, error){
if (xhr.status == 401) {
window.location = APP_URL + "/login" ;
}
});
};
这里的问题是预期的()函数,对于 Ajax 调用,它没有存储正确的会话变量,我不知道如何正确设置它。 我显然遗漏了一些明显的东西,有人可以帮忙吗? 干杯!
编辑
我想要实现的是:
- GUEST 在 //mysite/blabla
- 点击喜欢按钮
- 被重定向到登录
- 登录(或注册)
- 被重定向到 //mysite/blabla 并且 Like 已经被触发
【问题讨论】:
-
api 上不会有会话。因为它是无状态的。
-
是的,但必须有办法处理这个..
-
只需从 api 发送 401 响应。比你需要从前端处理它
-
不要从 api 重定向。
标签: php ajax laravel authentication laravel-5.6