响应内容必须是一个字符串或对象实现 __toString(), "boolean" 在 laravel 5.4 中给出

The Response content must be a string or object implementing __toString(), "boolean" given in laravel 5.4

我在 laravel 中使用 Sentinel 包进行高级身份验证。我可以正确注册,但是当我要登录时出现错误,例如 - 'The Response content must be a string or object implementing __toString(), "boolean" given.' 请任何人帮助我。

下面是我的路线:

 Route::get('/login', 'LoginController@login');
 Route::post('/login', 'LoginController@postLogin');

下面是我的控制器:

 public function login(){
    return view('authentication.login');
}

public function postLogin(Request $request){
    Sentinel::authenticate($request->all());
    return Sentinel::check();
}

Sentinel::check() return 一个布尔值,当用户通过身份验证时它 return 否则为 false。

https://cartalyst.com/manual/sentinel/2.0#sentinel-check

您可以使用 if 语句来 return 响应:

if(Sentinel::check()){
    // authenticated
} else {
    // not authenticated
    return redirect()->back();
}

这里有一件关于 laravel 响应的有趣事情。无论你从 laravel 控制器 return 作为响应,它都会尝试将 array/object 转换为字符串。但是可以通过名为 __toString() 的 PHP 魔术方法将对象转换为字符串。

因为您没有 returning 一个实现了 __toString() 方法的对象,所以您收到了这个错误。

如果你真的想看到 Sentinel::check() 的输出,那么你可以使用 dd(Sentinel::check()) 而不是 returning 它。此外,如果你真的想要,你甚至可以 return 它就像 ['sentinelCheck' => Sentinel::check()] 一样。

同样的事情发生在我身上。修复了将数组发送为 return.

时的问题

控制器

return ['status' => true, 'msg' => 'mesaj', 'data' => 'datalar'];