Пользовательский логин Laravel 5.7 не работает - новая установка - PullRequest
0 голосов
/ 30 января 2019

У меня новая установка laravel 5.7 Я создал базу данных и таблицу пользователей с фиктивной информацией вручную и соединил базу данных с приложением.

Может ли кто-нибудь указать, почему не работает следующий код.

login.blade.php

        <div class="form box">
           <h1 align="center">Login - MobileInfo</h1>
           <br />

           @if(isset(Auth::user()->username))
                <script>window.location="main/success"</script>
           @endif

           @if ($message = Session::get('error'))
           <div class="alert alert-danger alert-block">
               <button type="button" class="close" data-dismiss="alert">x</button>
               <strong>{{ $message }}</strong>
           </div>
           @endif

           @if (count($errors) > 0)
           <div class="alert alert-danger">
               <ul>
                   @foreach($errors->all() as $error)
                   <li>{{ $error }}</li>
                   @endforeach
               </ul>
           </div>

           @endif
            <form method="post" action="{{ url('login/checklogin') }}">
                {{ csrf_field()}}
                <div class="form-group">
                    <label>Username</label>
                    <input type="text" name="username" class="form-control" />
                </div>
                <div class="form-group">
                    <label>Password</label>
                    <input type="password" name="password" class="form-control" />
                </div>
                 <div class="form-group">
                    <input type="submit" name="login" class="btn btn-primary" value="Login" />
                </div>
            </form>

        </div>
    </div>

Контроллер входа

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Validator;
use Auth;

class LoginController extends Controller
{
public function index()
{
    return view ('login');
}

function checklogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required'
    ]);

    $user_data = array(
        'username' => $request->get('username'),
        'password' => $request->get('password')
    );

    if(Auth::attempt($user_data))
    {
        return redirect('login/success');
    }
    else
    {
        return back()->with('error', 'Wrong Login Details');
    }
}

function success()
{
    return view('dashboard');
}

function logout()
{
    Auth::logout();
    return redirect('login');
}
}

web.php

Route::get('/', 'LoginController@index');
Route::post('login/checklogin', 'LoginController@checklogin');
Route::get('login/success', 'LoginController@success');
Route::get('login/logout', 'LoginController@logout');

Ошибка, которую я вижу после добавления любой из правильных комбинаций имени пользователя и пароля, - это блок else Auth :: попытки ($ user_data), то есть «Неправильные данные для входа».

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Laravel хранит пароли, используя свой алгоритм хеширования, а затем проверяет / сравнивает с тем же алгоритмом хеширования.

Проблема в том, что вы сохранили буквенные пароли в базе данных, поэтому laravel не может проверить эти пароли.Laravel ожидает хешированный пароль из базы данных.

Буквенный пароль не будет работать.Итак ...

# 1

Лучшее решение - создать форму регистрации (используя laravel Auth) и вставить демонстрационные данные через эту форму регистрации.Laravel будет хранить пароли после хеширования и, в конечном итоге, успешно проверять эти пароли.

# 2

Другое (сложное / утомительное) решение состоит в том, чтобы выяснить алгоритм хеширования laravel ихеш пароли с отдельным скриптом php.Затем сохраните хешированные пароли в базе данных напрямую.В этом случае вам не нужна форма регистрации, потому что вы делаете это вручную.

Обновление для решения № 2

Используйте приведенный ниже код для хеширования ваших буквенных паролей в laravel5.х.

$hashedpassword = bcrypt('plaintextpassword');
0 голосов
/ 30 января 2019

По умолчанию авторизация Laravel обеспечивает аутентификацию с помощью электронной почты, поэтому для использования другого поля для входа в систему вы можете определить его в LoginController.

public function username()
{
    return 'username';
}

Документация

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