Я новичок в 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>
Вы дешифруете незашифрованную строку (вот почему вы получаете ошибку):
$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...
}
Так как у вас много данных, тип столбца в вашей базе данных слишком мал, и поэтому вы получаете эту ошибку.
Попробуйте установить столбец в longtext вместо текста в вашей миграции и посмотреть, работает ли это.