Laravel Auth :: id () возвращает ноль после входа в систему - PullRequest
1 голос
/ 12 июня 2019

У меня есть форма для входа на мою веб-страницу. На моем локальном компьютере все работает нормально. Но теперь я загружаю свой проект на свой сервер, и при входе в систему директива @auth () имеет значение null. Я вставил в свой контроллер это: dd (Auth :: id ()); и на моем локальном сервере возвращает идентификатор, но на рабочем сервере возвращает ноль ...

в web.php у меня есть этот код:

Route::group(['middleware' => 'role:admin' OR 'role:user'], function () {
    Route::get('/users/inicio', function(){         
    dd(Auth::id());
    return view('frontend.dashboardUser');});   
});

Это возвращение null

Вы можете мне помочь? Спасибо

Ответы [ 5 ]

0 голосов
/ 13 июня 2019

Я нашел фокус проблемы. В моем LoginController я перезаписываю свойство RedirectTo, вместо этого я сделал функцию. Он отлично работает на моей локальной машине, но на рабочем сервере сеанс теряется, когда я перезаписываю эту функцию.

public function redirectTo(){
    $role = Auth::user()->roles()->get(); 
    $urlPrevia =  url()->previous();
    $host = request()->getSchemeAndHttpHost();
    foreach ($role as $rol) {
     $rol_nombre = $rol->name;
     if ($urlPrevia==$host."/admin" && $rol_nombre=='admin')  {
        return "/homepage";
     } else {
        return "/users/dashboard";                
      }            
    }
}

Любые идеи, как я могу решить это? Спасибо

0 голосов
/ 12 июня 2019

Спасибо за ваши ответы ... Я изменяю свой код и добавляю:

Route::group(['middleware' => 'role:admin' OR 'role:user'], function () {
    Route::get('/usuers/inicio', 'FrontEnd\DashboardUserController@index'); 
});

И в моем DashboardUserController:

public function index(Request $request){
    var_dump(session_id());
    dd(Auth::id());
    return view ('frontend.dashboardUser');

}

Session_id возвращает: string (0) ""И Auth :: id () возвращает null

Я не знаю, где ошибка ...

0 голосов
/ 12 июня 2019

Вы зарегистрировали нового пользователя после того, как отправили свой код в производство? Я имею в виду, вы вошли в систему, используя существующего пользователя на производстве? Я полагаю, что ваша производственная и локальная база данных отличается, а пользователь, который существует в локальной среде, не существует в производственной базе данных.

Зарегистрируйте нового пользователя и войдите в систему как новый пользователь, а затем попробуйте получить доступ к маршруту, чтобы узнать, получите ли вы идентификатор авторизации.

0 голосов
/ 12 июня 2019

По соображениям безопасности вы не можете получить доступ к логину пользователя или любому другому сеансу в файле web.php, а также к конструктору класса.

Для архивирования этого вы можете использовать промежуточное ПО, напримерэто:

public function __construct() {

    $this->middleware(function (Request $request, $next) {
        if (!\Auth::check()) {
            return redirect('/login');
        }
        $this->userId = \Auth::id(); // you can access user id here

        return $next($request);
    });
}

Эта ссылка может помочь вам больше.Удачи !!!

0 голосов
/ 12 июня 2019

Я думаю, что может быть какая-то проблема сеанса, возможно, не поддерживается состояние сеанса.

Мое предложение:

Попробуйте echo session_id() несколько раз, если каждый раз генерируется другой идентификатортогда возникнет некоторая проблема с сеансом на сервере, иначе нет.

...