Javascript 在Laravel中调用ajax后如何重定向到登录?
我有一个对所有用户都可见的like按钮,但我只希望经过身份验证的用户能够喜欢和不喜欢该产品。如果一个客人试图喜欢,我想把他们重定向到登录页面 刃锉Javascript 在Laravel中调用ajax后如何重定向到登录?,javascript,php,ajax,laravel,laravel-5,Javascript,Php,Ajax,Laravel,Laravel 5,我有一个对所有用户都可见的like按钮,但我只希望经过身份验证的用户能够喜欢和不喜欢该产品。如果一个客人试图喜欢,我想把他们重定向到登录页面 刃锉 <div style="display: {{$product->isLiked ? "" : "none"}}" id="deletefavourite{{$product->id}}"onClick="deleteFromFavourites({{$product->id}}, {{ Auth::user()->
<div style="display: {{$product->isLiked ? "" : "none"}}" id="deletefavourite{{$product->id}}"onClick="deleteFromFavourites({{$product->id}}, {{ Auth::user()->id }})"> unlike </div>
<div style=" display: {{!$product->isLiked ? "" : "none"}}" id="addfavourites{{$product->id}}" onClick="addToFavourites({{$product->id}}, {{ Auth::user()->id }})" > like </div>
类控制器
public function likeProduct($id)
{
if(Auth::check()){
$this->handleLike(Product::class, $id);
return redirect()->back();
}
else{
return redirect()->route('login')
}
}
public function handleLike($type, $id)
{
$existing_like = Like::withTrashed()->whereLikeableType($type)->whereLikeableId($id)->whereUserId(Auth::id())->first();
if (is_null($existing_like)) {
Like::create([
'user_id' => Auth::id(),
'likeable_id' => $id,
'product_id' => $id,
'likeable_type' => $type,
]);
} else {
if (is_null($existing_like->deleted_at)) {
$existing_like->delete();
} else {
$existing_like->restore();
}
}
}
我尝试在控制器上执行
(Auth::check()
,但这只隐藏了按钮。如何解决此问题?更好的选择是不重定向,而是返回未经授权的错误,在JS中捕获该错误并重定向到登录页面
error: function (xhr) {
if (xhr.status == 401) {
window.location.href = '/path/to/login';
}
}
除此之外,您还需要在控制器上返回401状态代码
else{
abort(401, 'You need to login again.');
}
我试图将该代码放入js
//handle error
中,但是@Aza RnglabI不起作用。如果已修复js代码,请确保也将状态代码添加到控制器中。中止(401)所以js端检测到ajax调用错误,所以在用户点击按钮之前都是这样的,如果没有经过身份验证,它会显示一个错误试图获取非对象的属性,但我希望即使是来宾也能看到按钮。(用户在登录之前无法看到按钮)@Aza RnglabWelcome,对不起,我无法提供更多帮助
else{
abort(401, 'You need to login again.');
}