Laravel по-русски

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

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

#1 09.04.2019 13:14:48

Проблема с авторизацией

Так - раньше сайт работал наормально а сейчас беда
Был модуль Апаче в связке с пыхой
Сейчас нгникс+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;
}

Очень прошу помочь разобраться в чем проблема и к
ак ее решить

Изменено Kaner (09.04.2019 13:38:08)

Не в сети

#2 12.04.2019 12:12:35

Re: Проблема с авторизацией

Я конфиг брал отсюда

https://laravel.com/docs/5.7/deployment

Не в сети

#3 12.04.2019 19:21:41

Re: Проблема с авторизацией

Я писал статью на этом сайте как настроить линукс сервер для промышленного использования в качестве хостинга.
Подобную конфигурацию использует ispmanager панель управления сервером (но моя лучше smile)

https://laravel.ru/posts/480
https://laravel.ru/posts/509

Не в сети

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