Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
скажем даже используя
Auth::loginUsingId(81);
аутентификация не сохраняется
И ещё было бы неплохо использовать термины одинаково. Вот я шпаргалку писал когда-то: https://php.ru/forum/threads/avtorizaci … ija.53234/
просто я не уверен что мы с тобой понимаем слово "авторизация" одинаково.
не совсем понял))
ну судя оп вашем посту я имею ввиду аутентификацию
но аутентифицированный пользовтаель имеет доступ к определенным страницам
если можете подскажите както роуты от этого меняются?
"Заканчивается мгновенно" — это ты как определяешь, тебя приложение вообще узнаёт хотябы какое-то время или ты делаешь вывод эмпирически, наблюдая какие-то записи?
ну потому что если в контролере Auth::attempt и потом Auth::check возвращают true
$user = Auth::user(); - также дает данные об авторизованном пользователе
потом меня редиректит на /login опять
то есть меня редиректит на /account а так как я уже не авторизован то меня редиректит на /login
отсюда такой вывод
даже если не делать редирект а просто Auth::attempt а потом скажем открывать главную страницу то авторизации нет
ну смотрите
вот мой контроллер с авторизацией:
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Psy\Exception\ErrorException;
use Session;
/**
* Class LoginController
* @package App\Http\Controllers\Auth
*/
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/account';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware('guest')->except('logout');
}
/**
* @param Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function auth(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|exists:users,email',
'password' => 'required|string|min:6',
]);
$user = User::where(['email' => $request->email])->first();
if (count($validator->errors()) || ! $user) {
return response()->json(['loginErrors' => $validator->errors(), 'status' => 0], 400);
}
$rt = '/account';
if($user->role == 'rr1')
$rt = '/rr1';
elseif($user->role == 'rr2')
$rt = '/rr2';
$credentials = $request->only(['email', 'password']);
if (Auth::attempt($credentials)) {
$user = Auth::user();
return redirect($rt);
} else {
return redirect('/');
}
}
...
}
вот мои роуты в web.php
Route::middleware('guest')->get('/login', function () {
return view('site.auth');
})->name('authUser');
Route::middleware('auth')->get('/logout', 'Auth\LoginController@logout')->name('logout');
Route::post('/registration', 'Site\RegistrationController@registration');
Route::post('/login', 'Auth\LoginController@auth');
можете что-нибудь посказать?
что не так?
Вчера я создавал тему где описывал проблемв - 419 статус
а если отключить токен то просто не авторизуется
Я пришел к выводу что тут дело в том что сессии оканчиваются сразу же
SESSION_LIFETIME=1200
сесии были в файлах - папка была доступна для записи
перенес сессии в бд - но не помогло вот видно что меня авторизовало под ид 81 а потмо авторизация пропала:
http://prntscr.com/n9zy6j
в чем может быть дело??
Так - раньше сайт работал наормально а сейчас беда
Был модуль Апаче в связке с пыхой
Сейчас нгникс+php-fpm
Версия PHP 7.1.22
Laravel 5.5.4
Вообще проблема с авторизацией
Изначально проблема была в том что post - запрос при авторизации возвращал код - 419 unknown status
Везде писалось что это проблема с токеном - но на сайте есть и токен в хеде и в форму я тоже добавил и передвал его с ключом _token
Затем я добавил страницу login в исключения для токена
Проблема с 419 статусом прошла - но авторизация не работает
Auth::attempt - возвращает true
если потом вызвать Auth::check - тоже будет true
даже есть проверить так (вызвать сразу после Auth::attempt):
$user = auth()->user();
print($user->id);
print($user->name);
print($user->email);
все данные верно выведутся - но по ответу аякса происходит обновление страницы и авторизации нет
вот роутинг
Route::middleware('guest')->get('/login', function () {
return view('site.auth');
})->name('authUser');
Route::middleware('auth')->get('/logout', 'Auth\LoginController@logout')->name('logout');
Route::post('/registration', 'Site\RegistrationController@registration');
Route::post('/login', 'Auth\LoginController@auth');
вот контроллер
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User\User;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Psy\Exception\ErrorException;
/**
* Class LoginController
* @package App\Http\Controllers\Auth
*/
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/account';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
/**
* @param Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function auth(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|exists:users,email',
'password' => 'required|string|min:6',
]);
$user = User::where(['email' => $request->email])->first();
if (count($validator->errors()) || ! $user) {
return response()->json(['loginErrors' => $validator->errors(), 'status' => 0], 400);
}
$rt = '/account';
if($user->role == 'pp1')
$rt = '/pp1';
elseif($user->role == 'pp2')
$rt = '/pp2';
$credentials = $request->only(['email', 'password']);
if (Auth::attempt($credentials)) {
$response = redirect()->intended('/account');
/*
$user = auth()->user();
print($user->id);
print($user->name);
print($user->email);
die;
*/
return response()->json(['status' => 1,'redirect' => $rt, 'role'=> $user->role, 'url' => $response->headers->get('location')], 202);
} else {
return response()->json(['passwordError' => 'Не верный пароль','redirect' => $rt, 'status' => 0], 400);
}
}
....
}
конфиг сервера следующий:
server {
server_name mysite.com [url=http://www.mysite.com]www.mysite.com[/url];
charset UTF-8;
index index.php index.html;
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/mysite.com/*.conf;
access_log /var/www/httpd-logs/mysite.com.access.log;
error_log /var/www/httpd-logs/mysite.com.error.log notice;
ssi on;
return 301 https://$host:443$request_uri;
set $root_path /var/www/www-root/data/www/mysite.com/public;
root $root_path;
location / {
# First try and load files from the public folder, if they don't exist
# then send the request through to laravel
try_files $uri $uri/ /index.php;
# Forward requests on to PHP-FPM
location = /index.php {
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
}
}
# If someone explicitly tries to load a PHP file return a 404 error,
# always use url rewrites and never have the .php extension in the url
location ~ \.php$ {
return 404;
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f andrewq7@gmail.com";
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
listen 5.23.49.172:80;
gzip on;
gzip_comp_level 9;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}
server {
server_name mysite.com [url=http://www.mysite.com]www.mysite.com[/url];
ssl_certificate "/var/www/httpd-cert/www-root/mysite.com.crtca";
ssl_certificate_key "/var/www/httpd-cert/www-root/mysite.com.key";
ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
add_header Strict-Transport-Security "max-age=31536000;";
ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
charset UTF-8;
index index.php index.html;
disable_symlinks if_not_owner from=$root_path;
include /etc/nginx/vhosts-includes/*.conf;
include /etc/nginx/vhosts-resources/mysite.com/*.conf;
access_log /var/www/httpd-logs/mysite.com.access.log;
error_log /var/www/httpd-logs/mysite.com.error.log notice;
ssi on;
rewrite ^/(.*)/$ /$1 permanent; # remove trailing slash
set $root_path /var/www/www-root/data/www/mysite.com/public;
root $root_path;
location / {
# First try and load files from the public folder, if they don't exist
# then send the request through to laravel
try_files $uri $uri/ /index.php;
# Forward requests on to PHP-FPM
location = /index.php {
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
}
}
# If someone explicitly tries to load a PHP file return a 404 error,
# always use url rewrites and never have the .php extension in the url
location ~ \.php$ {
return 404;
}
location @php {
fastcgi_index index.php;
fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f andrewq7@gmail.com";
fastcgi_pass unix:/var/www/php-fpm/www-root.sock;
fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
try_files $uri =404;
include fastcgi_params;
}
listen 5.23.49.172:443 ssl;
gzip on;
gzip_comp_level 9;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}
Очень прошу помочь разобраться в чем проблема и к
ак ее решить