Laravel - я создал новых пользователей в представлении, однако, когда я пытаюсь войти в их учетные записи, "учетные данные не существуют" - PullRequest
0 голосов
/ 10 марта 2020

Я немного застрял .. Я новичок в laravel, поэтому, пожалуйста, извините за недостаток знаний. В моем приложении у меня есть 3 типа пользователей. Админ, Инструктор и Студент. Для начала я создал трех пользователей для этих ролей в своем UsersTableSeeder и хэшировал их пароли.

При разработке своей системы я создал «форму создания пользователей», к которой имеют доступ только администраторы. Однако, когда я пытаюсь войти в систему с пользователями, созданными через эту форму, очевидно, что их «учетные данные не существуют». Я предполагаю, что это может быть связано с тем, что их пароли не хранятся как хешированные в БД? Я понимаю, что это плохая практика, но я не знаю, как передать хешированный пароль в view / controller. Любой совет приветствуется.

create.blade.php;

<div class="form-group">
     <label class="required" for="password">Password</label>
           <input class="form-control {{ $errors->has('password') ? 'is-invalid' : '' }}" type="password" name="password" id="password" required>
               @if($errors->has('password'))
                   <div class="invalid-feedback">
                         {{ $errors->first('password') }}
                   </div>
                @endif
</div>  

UsersController;

public function create()
{
    $roles = Role::all();
    $courses =Course::all();
    return view('admin.user.create', compact('roles', 'courses'));
}

Я надеюсь, что мое изображение ниже поможет вам понять. Пользователи с хешированными паролями, созданные либо с помощью формы регистрации, либо UsersTableSeeder, однако я должен иметь возможность успешно создать пользователя с помощью формы создания. enter image description here

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вам нужно будет иметь sh пароли. Это, скорее всего, ваша проблема. Итак, в вашем методе контроллера вам понадобится что-то вроде этого ...

$user = new User;
$user->name = 'user';
$user->email = 'user@user.com;
$user->password = Hash::make('password');
$user->save();

Если у вас есть какие-либо настраиваемые поля, следуйте тому же принципу с каждым из них.

0 голосов
/ 10 марта 2020

вы правы - нехэшированные пароли вызовут у вас много проблем. Самое простое решение - просто иметь sh пароли при создании пользователей. В laravel встроен фасад для хеширования, поэтому при создании:

$hashedPassword = Hash::make($request->request->get('password'))
$user = User::create($request->all());
User::where('email', $user->email)->update(['password' => $hashedPassword]);

Обратите внимание, что этот код извлечен из API, который я написал некоторое время назад, когда на сервер был отправлен запрос с необходимыми параметрами создать пользователя (думаю, что это просто электронная почта / пароль). Но да, по сути это следующие шаги:

1) Создать хешированный пароль, используя фасад Ha sh и пароль в виде открытого текста

2) Создать пользователя

3) Немедленно обновить ваш пользователь с хешированным паролем.

Это означает, что вы также можете использовать метод Ha sh :: check (), когда пользователи входят в систему:

        if (Hash::check($request->input('password'), User::where('email', $request->input('email'))->first()->password)) {
            // success, user logs in 
        } else {
            $msg = ['error' => true, 'message' => 'Incorrect password'];

            return response()->json($msg, 200);
        }

Надеюсь, это поможет!

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