Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Проблема собственно в теме: есть проектик, на домашнем сервер все работает хорошо, но после переноса на хостинг не отрабатывает почему аутентификация. При попытке получить данные Auth::user() говорит, что пусто. При выполнении того же кода на домашнем сервере все выдает как надо.
не подскажете в чем может быть проблема или куда рыть? Подозрение есть, что проблема с записью сессии, но при заходе на сайт, сессия создается.
Не в сети
Могу предположить что проблема в mod_rewrite в apache. Либо нет базы users в mysql. Или логин пароль для базы не правильный, что скорее всего
Изменено Afatar (28.11.2014 13:04:32)
Не в сети
Вот можно немного подробнее с mod_rewrite, именно его я использую для того, чтобы изменить точку входа с mydomain.ru/laravel/public на mydomain.ru.
Имеем:
2 проекта, один работает на домашнем сервере, другой работает на хостинге, настройки у обоих одинаковые и обращаются к одной и той же БД, которая находится на стороннем сервере, т.е. оба проекта имеют внешний доступ к базе. При использовании домашнего сервера вся авторизация проходит как надо и я могу попасть в личный кабинет.
Не в сети
Если перенаправление на 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, то проблема с базой.
Не в сети
Проблем с базой нет. На самом сайте есть модуль, который выводит новости из БД и они отображаются и выбираются от туда. Да и проблем с БД не может быть в принципе, т.к. на домашнем сервере все работает и на хостинге ничего не изменялось в плане кода.
Не в сети
Может кто-нибудь скинуть пример своего htaccess с изменением точки входа в приложение?
Не в сети
Может кто-нибудь скинуть пример файла .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 все работает корректно, эти файлы были просто перенесены на хостинг
Очень буду благодарен за помощь и полезную подсказку
Не в сети
в общем ошибка спряталась где-то тут
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);
Но все такие тему не закрываю, может кто-нибудь все такие предложит правильное решение проблемы, потому что свой костыль использовать глупо немного
Не в сети
Сессию пробовал менять с file на например database или redis, в config/session.php ? Папка app/storage и подпапки в ней открыты для записи ?
Не в сети
Менять не пробовал, но в сессию методом Session::put или Session::flash данные пишутся.
Я знаю например, что при подобном коде:
Session::put('info','put here');
exit();
В сессию данные не записывают, потому Laravel останавливается принудительно (ссылку дать на источник этой инфы не могу т.к. потерял)
Вот я и думаю, что методы Auth::login() и Redirect::to() как-то аналогично не могут ужиться
Не в сети
Страницы 1