Auth :: user () возвращает ноль в Laravel 5.8 - PullRequest
0 голосов
/ 02 мая 2019

У меня проблема с аутентификацией в моем проекте Laravel 5.8.10.Я не использую форму по умолчанию, которую Laravel создает для аутентификации.Когда я получаю доступ к URL / панели инструментов в браузере, обычно пользователь перенаправляется при входе в систему.Приложение позволяет это в любом случае.Также, когда я использую Auth::user(), он возвращает ноль.

Когда я ввожу неверное имя пользователя и пароль, он не передается с экрана входа в систему.Когда я набираю неверные учетные данные, он перенаправляет на панель управления.Проблема доступа к URL через панель инструментов также сохраняется.Это как если бы вам не нужна аутентификация для доступа к маршруту.

Примечание: в моем файле .env есть переменная PASSWORD_HASH для включения или отключения шифрования пароля.

Пользовательмодель

namespace App\Entities;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\SoftDeletes;

class User extends Authenticatable
{
    use Notifiable;
    use SoftDeletes;

    protected $table = "users";
    public $timestamps = true;

    protected $fillable = [
        'cpf', 'name', 'phone', 'birth', 'gender', 'notes', 'email', 'password', 'status', 'permission'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function groups()
    {
        return $this->belongsToMany(Group::Class, 'user_groups');
    }

    public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = env('PASSWORD_HASH') ? bcrypt($value) : $value;
    }
}

config / auth.php

return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Entities\User::class,
        ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
];

DashboardController

public function auth(Request $request)
{
    $data = [
        'email' => $request->get('username'),
        'password' => $request->get('password')
    ];
    try {
        if (env('PASSWORD_HASH')) {
            Auth::attempt($data, false);
        } else {
            $user = $this->repository->findWhere(['email' => $request->get('username')])->first();

            if (!$user)
                throw new Exception("O e-mail informado é inválido. PEEEEN!");
            if ($user->password != $request->get('password'))
                throw new Exception("A senha informada é inválida. PEEEEN!");
            Auth::login($user);
        }
        return redirect()->route('user.dashboard');
    } catch (Exception $e) {
        return $e->getMessage();
    }
}

Маршруты

Route::get('/login', ['uses' => 'Controller@fazerlogin']);
Route::post('/login', ['as' => 'user.login', 'uses' => 'DashboardController@auth']);
Route::get('/dashboard', ['as' => 'user.dashboard', 'uses' => 'DashboardController@index']);

Просмотр логина

<section id="conteudo-view" class="login">
    <h1>Investindo</h1>
    <h3>O nosso gerenciador de investimento</h3>
    {!! Form::open(['route' => 'user.login', 'method' => 'post']) !!}
    <p>Acesse o sistema</p>
    <label>
        {!! Form::text('username', null, ['class' => 'input', 'placeholder' => "Usuário"]) !!}
    </label>
    <label>
        {!! Form::password('password', ['placeholder' => 'Senha']) !!}
    </label>
    {!! Form::submit('Entrar') !!}
    {!! Form::close() !!}
</section>

.env

PASSWORD_HASH=false

Идея состоит в том, что, когда оно ложно при регистрации пользователя, оно прекращает шифрование пароля, а когда оно истинно, выполняет шифрование.Это работает.

Пользователь базы данных

https://pasteboard.co/IcMC2ds.png

1 Ответ

0 голосов
/ 02 мая 2019
  1. , чтобы прекратить перенаправление на панель мониторинга без авторизации, использовать auth middleware route

    Route :: middleware (['auth']) -> group (function () {

     Route::get('/dashboard', ['as' => 'user.dashboard', 'uses' => 'DashboardController@index']);
    

    });

  2. env возвращает строку, а не логические значения, поэтому используйте env('PASSWORD_HASH') == 'true', чтобы проверить, включен или нет хэш пароля

  3. используйте loginUsingId() для входа в систему вручную.

    if (env ('PASSWORD_HASH') == 'true') { Auth :: попытки ($ data, false); } еще { $ user = User :: where ('email', $ request-> username) -> где ('password', $ request-> password) -> first ();

    if(!$user){
        throw new Exception("O e-mail informado é inválido. PEEEEN!");
    } else {
        Auth::loginUsingId($user->id);
        //redirect
    }
    

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...