Laravel 5.1 контроллер входа не работает

1

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

Сообщение об ошибке:

DecryptException в строке BaseEncrypter.php 45: Недопустимая полезная нагрузка.

Контроллер

namespace App\Http\Controllers;

use DB;
use Hash;
use Crypt;
use Validator;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;
use App\Http\Controllers\Controller;


class LoginControl extends Controller
{

    public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required',
            'password' => 'required',
        ]);

        if ($validator->fails()) {
            return redirect('/login')
                        ->withErrors($validator)
                        ->withInput();
        }
        else{
            $email = $request->email;
            $password = $request->password;
            $results = DB::select('select * from users where email = ? and password = ?', [$email,$password]);
            $pass = Crypt::decrypt($request->password);
            if($results == NULL){
                return redirect('/login');
            }
            else{
                return redirect('/');
            }
        }
    }
}

маршрутизатор

<?php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/register', function () {
    return View::make('register');
});

Route::get('/login', function() {
    return View::make('login');
});

Route::post('actionregis', 'RegisControl@store');

Route::post('actionlogin', 'LoginControl@login');

Посмотреть

<html lang="en">
    <head>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
        <title>Laravel Quickstart - Basic</title>

        <!-- CSS And JavaScript -->
    </head>

    <body>
        <div class="container">
            <nav class="navbar navbar-default">
                <!-- Navbar Contents -->
            </nav>
        </div>

        <div class="panel-body">
        <div class="col-md-8 col-md-offset-2">

        <!-- New Task Form -->
        <form action="/testing/public/actionlogin" method="POST" class="form-horizontal">
            {{ csrf_field() }}

            @if (count($errors) > 0)
                <!-- Form Error List -->
                <div class="alert alert-danger">
                    <strong>Whoops! Something went wrong!</strong>

                    <br><br>

                    <ul>
                        @foreach ($errors->all() as $error)
                            <li>{{ $error }}</li>
                        @endforeach
                    </ul>
                </div>
            @endif  
            <!-- Task Name -->
                {!! csrf_field() !!}

                <div class="form-group">
                    <label for="user">Email</label>
                    <input type="text" name="email" id="task-email" class="form-control">
                </div>
                <div class="form-group">
                    <label for="user">Password</label>
                    <input type="password" name="password" id="task-password" class="form-control">
                </div>

                <div class="form-group">
                    <input type="checkbox" name="remember"> Remember Me
                </div>

                <div class="form-group">
                    <button type="submit" class="btn btn-default">Login</button>
                </div>
            </form>
        </div>
    </div>

    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    </body>
</html>
  • 0
    Возможно, ваш ключ шифрования изменился?
Теги:
laravel-5.1

2 ответа

2
Лучший ответ

Вы дешифруете незашифрованную строку (вот почему вы получаете ошибку):

$pass = Crypt::decrypt($request->password);

Почему это даже здесь? $pass ничего не делает.

На данный момент вы ищете пользователя с незашифрованным паролем.

Чтобы проверить, действительно ли пароль, вы НЕ расшифровываете пароль в БД, вы шифруете вставленный и видите, совпадают ли они.

Как вы шифруете пароль при его вставке?

По умолчанию Laravel обеспечивает аутентификацию по большей части, вы должны использовать ее, если не знаете, что делаете, и хотите, чтобы аутентификация была как можно более безопасной. Читайте об этом здесь: http://laravel.com/docs/5.0/authentication

Чтобы написать собственную аутентификацию, вы должны использовать класс Hash:

$password = Hash::make('some_password'); // Use this to hash your password (you can store that in the DB)

// To check the password, you parse the user hashed password from the DB
... // <- parse user here
$hashedPassword = $user->password;

// Password checking
if (Hash::check('some_password', $hashedPassword))
{
    // The passwords match...
}
  • 0
    $ user-> password = Crypt :: encrypt ($ request-> password); вот метод, который я использовал для шифрования моего пароля
  • 0
    Хорошо. Таким образом, чтобы проверить правильность паролей, вы, скорее всего, захотите зашифровать введенный пароль и затем выполнить поиск результатов с этим зашифрованным паролем. Вы действительно не хотите расшифровывать что-то. Это действительно должно быть не расшифровано. Ларавел предлагает использовать это . Я отредактирую свой ответ, чтобы включить немного больше информации о функциональности хэша.
Показать ещё 1 комментарий
0

Так как у вас много данных, тип столбца в вашей базе данных слишком мал, и поэтому вы получаете эту ошибку.

Попробуйте установить столбец в longtext вместо текста в вашей миграции и посмотреть, работает ли это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню