Я использую пакет Sentinel для расширенной аутентификации в laravel. Я могу зарегистрироваться должным образом, но когда я собираюсь войти в систему, возникает ошибка вроде: «Содержимое Ответа должно быть строкой или объектом, реализующим __toString (), с заданным логическим значением». Пожалуйста, кто-нибудь, помогите мне.
Вот мои маршруты ниже:
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();
}
Вот интересная вещь о реакции Laravel. Что бы вы ни возвращали из контроллера laravel в качестве ответа, он пытается преобразовать этот массив / объект в строку. Но преобразовать объект в строку можно с помощью магического метода PHP, называемого __toString()
,
Поскольку вы не возвращаете объект, который имеет реализацию __toString()
метод вы получаете эту ошибку.
Если вы действительно хотите увидеть результат Sentinel::check()
тогда вы можете использовать dd(Sentinel::check())
вместо того, чтобы вернуть его. Кроме того, вы можете даже вернуть его как ['sentinelCheck' => Sentinel::check()]
если ты действительно хочешь.
Sentinel::check()
вернуть логическое значение, когда пользователь аутентифицирован, он возвращает пользователя, в противном случае false.
https://cartalyst.com/manual/sentinel/2.0#sentinel-check
Вы можете использовать оператор if для возврата ответа:
if(Sentinel::check()){
// authenticated
} else {
// not authenticated
return redirect()->back();
}
То же самое случилось со мной. Исправлена проблема при отправке массива в качестве возврата.
контроллер
return ['status' => true, 'msg' => 'mesaj', 'data' => 'datalar'];