Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.11.2014 12:49:59

Не работает Auth::login()

Проблема собственно в теме: есть проектик, на домашнем сервер все работает хорошо, но после переноса на хостинг не отрабатывает почему аутентификация. При попытке получить данные Auth::user() говорит, что пусто. При выполнении того же кода на домашнем сервере все выдает как надо.
не подскажете в чем может быть проблема или куда рыть? Подозрение есть, что проблема с записью сессии, но при заходе на сайт, сессия создается.

Не в сети

#2 28.11.2014 13:03:55

Re: Не работает Auth::login()

Могу предположить что проблема в mod_rewrite в apache. Либо нет базы users в mysql. Или логин пароль для базы не правильный, что скорее всего

Изменено Afatar (28.11.2014 13:04:32)

Не в сети

#3 28.11.2014 13:41:28

Re: Не работает Auth::login()

Вот можно немного подробнее с mod_rewrite, именно его я использую для того, чтобы изменить точку входа с  mydomain.ru/laravel/public на mydomain.ru.
Имеем:
2 проекта, один работает на домашнем сервере, другой работает на хостинге, настройки у обоих одинаковые и обращаются к одной и той же БД, которая находится на стороннем сервере, т.е. оба проекта имеют внешний доступ к базе. При использовании домашнего сервера вся авторизация проходит как надо и я могу попасть в личный кабинет.

Не в сети

#4 28.11.2014 13:55:32

Re: Не работает Auth::login()

Если перенаправление на  mydomain.ru работает, значит mod_rewrite отрабатывает. Значит проблема в базе. Попробуй создать, какой-нибудь левый роут, и посмотри, выгружаются ли данные из базы.

Route::get('left', function(){
$user=Users::All(); // Или как у тебя таблица называется с пользователями....
return View::make('left', ['user'=>$user]);

Делаешь вьюшку left.blade.php

@foreach($user as $vol)
{{ $id }}<br>
{{ username }}<br>
....
...
@endif

Если пустота по адрсу mydomain.ru/left, то проблема с базой.

Не в сети

#5 28.11.2014 14:00:20

Re: Не работает Auth::login()

Проблем с базой нет. На самом сайте есть модуль, который выводит новости из БД и они отображаются и выбираются от туда. Да и проблем с БД не может быть в принципе, т.к. на домашнем сервере все работает и на хостинге ничего не изменялось в плане кода.

Не в сети

#6 28.11.2014 14:03:41

Re: Не работает Auth::login()

Может кто-нибудь скинуть пример своего htaccess с изменением точки входа в приложение?

Не в сети

#7 29.11.2014 19:45:38

Re: Не работает Auth::login()

Может кто-нибудь скинуть пример файла .htaccess на боевом хостинге у себя? Меня интересует в первую очередь работа с mod_rewrite на apache. Структура файлов такая на хостинге:
www/mydomain.ru/laravel
В папке laravel, соответсвено, лежат все каталоги приложения (app, public и т.д.)
В корневой папке mydomain.ru лежит файл .htaccess:

RewriteEngine On
      RewriteCond %{HTTP_HOST} ^mydomain\.ru$ [OR]
      RewriteCond %{HTTP_HOST} ^www\.mydomain\.ru$
      RewriteCond %{REQUEST_URI} !^/laravel/public/
      RewriteRule ^(.*)   /laravel/public/$1 [L]

Данный код позволяет мне отображать страницы не по адресу mydomain.ru/laravel/public, а при заходе на страницу mydomain.ru
Вся навигация на сайте работает корректно, более того, на сайте имеется форма обратной связи, которая отправляет вопрос в БД и эта форма отрабатывается как надо. Проблема именно в авторизации.
провожу эксперимент:
Захожу по адресу mydomain.ru (это очень важно) и пытаюсь залогиниться. Ввожу данные, нажимаю вход. Все происходит через AJAX. Появляется сообщение, что авторизация успешна и происходит редирект на адрес "/kabinet". В роутах на этот маршрут стоит фильтр before auth. Он меня блокирует и возвращает на страницу ошибки авторизации, что мол я не авторизировался и не могу попасть в личный кабинет. Если убрать этот фильтр и за этим маршрутом попробовать вывести данные авторизированного пользователя

$user = Aith::user();
print_r($user);

выводится NULL, т.е. никаких данных нет и пользователя авторизированного тоже нет.

Пробую следующее: захожу по адресу mydomain.ru/laravel/public и появляется главная страница, но на ней не загружены стили и картинки (но это не столь важно в настоящий момент). Опять же пользуюсь формой авторизации и после того, как нажимаю кнопку войти перехожу по маршруту /kabinet и тут то у меня выводится авторизированый пользователь, все его данные необходимые

Ниже код контроллера, который проводит авторизацию

// здесь получили пользователя от модели
if (count($user) != 0) {
            Auth::login($user, true);
            Redirect::to("/kabinet")->with("user", $user);
        } else {
            $this->accessDeniedTime();
            return($this->err_not_found_user);
        }

а это кода роута

Route::get("/kabinet", array("before" => "auth|crsf", "uses" => "NavigationController@login"));

Повторюсь, на домашнем сервере, на котором я имею доступ к файлу httpd.conf и возможность изменения DocumentRoot все работает корректно, эти файлы были просто перенесены на хостинг

Очень буду благодарен за помощь и полезную подсказку

Не в сети

#8 01.12.2014 17:53:07

Re: Не работает Auth::login()

в общем ошибка спряталась где-то тут

            Auth::login($user, true);
            Redirect::to("/kabinet")->with("user", $user);

Я так понима функция Auth::login записывает авторизированого пользователя в сессию и в БД в таблице пользователей заполняет поле remember_token. В саму таблицу token записывается, а вот в сессию ничего не пишется. Пришлось вручную заносить текущего пользователя заносить эту сессию и потом, в самом контроллере, который обрабатывает навигацию использовать функция Auth::login

            Session::flash("user", $user);
            Redirect::to("/kabinet")->with("user", $user);

Но все такие тему не закрываю, может кто-нибудь все такие предложит правильное решение проблемы, потому что свой костыль использовать глупо немного

Не в сети

#9 01.12.2014 19:45:02

Re: Не работает Auth::login()

Сессию пробовал менять с file на например database или redis, в config/session.php ? Папка app/storage и подпапки в ней открыты для записи ?

Не в сети

#10 03.12.2014 12:36:58

Re: Не работает Auth::login()

Менять не пробовал, но в сессию методом Session::put или Session::flash данные пишутся.
Я знаю например, что при подобном коде:

Session::put('info','put here');
exit();

В сессию данные не записывают, потому Laravel останавливается принудительно (ссылку дать на источник этой инфы не могу т.к. потерял)
Вот я и думаю, что методы Auth::login() и Redirect::to() как-то аналогично не могут ужиться

Не в сети

Подвал раздела