На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок 4. Простая авторизация и регистрация в Laravel


На этом уроке из серии уроков по Laravel мы создадим еще пару форм и попробуем с помощью них авторизовываться и регистрироваться на сайте. Для хранения данных о пользователях есть дефолтная таблица users. Теперь перейдем к практике. Для начала в файле routes/web.php пропишем наш новый урл

Route::get('/login', function () {
    return view('login');
});
Затем добавим файл представления D:\xampp\htdocs\new_project\resources\views\login.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Вход</title>
		<link href="css/app.css" rel="stylesheet">
</head>
<body>
<div class="container">
     <div class="row">
        <form method="POST" action="login" style="text-align: center; margin: auto;">
		{!! csrf_field() !!}
<div>
    Email
    <input style="margin: 10px;" type="email" name="email" value="{{ old('email') }}">
  </div>

  <div>
    Пароль
    <input style="margin: 10px;" type="password" name="password" id="password">
  </div>

  <div>
    <input style="margin: 10px;" type="checkbox" name="remember"> Запомнить меня
  </div>

  <div>
    <button style="margin: 10px;" type="submit">Вход</button>
  </div>
</form>
        </div>
    </div>
<script src="js/app.js"></script>
</body>
</html>
Получается просто, но со вкусом (наверное, я не дизайнер)



Немного теории: получение аутентифицированного пользователя

После установки стартового набора аутентификации и разрешения пользователям регистрироваться и аутентифицироваться в вашем приложении вам часто придется взаимодействовать с текущим аутентифицированным пользователем. При обработке входящего запроса вы можете получить доступ к аутентифицированному пользователю с помощью пользовательского метода auth facade:

use Illuminate\Support\Facades\Auth;
$user = Auth::user();
$id = Auth::id();
Возвращаемся к нашим баранам практике. Создаем AuthController.php в app\Http\Controllers

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AuthController extends Controller
{

	
    public function postSignin(Request $request)
    {
	echo "jk";
    }
}
Теперь возвращаемся к роутингу. Сначала добавляем, чтобы выводило только для гостей, а также обработчик пост-запроса

Route::middleware('guest')->group(function() {
	Route::get('/login', function () {
		return view('login');
	});
	
	Route::post('/login', 'AuthController@postSignin');
});
Пробуем..и получаем ошибку

Illuminate\Contracts\Container\BindingResolutionException
Target class [AuthController] does not exist.
http://localhost/new_project/public/login
Еще немного меняем роутинг:

Route::middleware('guest')->namespace('\App\Http\Controllers')->group(function() {
	Route::get('/login', function () {
		return view('login');
	});
	
	Route::post('/login', 'AuthController@postSignin'
	);
});
Отлично, теперь у нас при пост-запросе идет обращение к контроллеру. Измениим его так

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;


class AuthController extends Controller
{

	
    public function postSignin(Request $request)
    {
		
		if (! Auth::attempt($request->only('email', 'password'), $request->has('remember')))
		{
			var_dump($request);
			echo  'Неправильный логин или пароль';
		}
		
	

		else {
		echo 'Вы успешно авторизовались';
    }
	}
}
Добавим через phpmyadmin в таблицу users нового пользователя с паролем “test” и .. и не зайдется. Что ж, давайте тогда попробуем зарегистрироваться встроенными средствами Laravel 8. Добавим в роутер:

	//регистрация нового пользователя
	Route::get('/reg', function () {
		return view('reg');
	});
	
	Route::post('/reg', 'AuthController@postReg');
А также представление страницы регистрации reg.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Регистрация</title>
		<link href="css/app.css" rel="stylesheet">
</head>
<body>
<div class="container">
     <div class="row">
        <form method="POST" action="reg" style="text-align: center; margin: auto;">
		{!! csrf_field() !!}
		
		<div>
    Имя    
    <input style="margin: 10px;" type="text" name="name" id="name">
  </div>
<div>
    Email   
    <input style="margin: 10px;" type="email" name="email" id="email">
  </div>

  <div>
    Пароль
    <input style="margin: 10px;" type="password" name="password" id="password">
  </div>


  <div>
    <button style="margin: 10px;" type="submit">Зарегистрироваться</button>
  </div>
</form>
        </div>
    </div>
<script src="js/app.js"></script>
</body>
</html>
Ну и изменим контроллер:

/**
     * Создает нового пользователя, автоматически авторизуя его 
     *
     * @param Request $request
     * @return void
     */
    public function postReg(Request $request)
    {
        $user = User::create([
            'email'    => $request->input('email'),
            'name'     => $request->input('name'),
            'password' => bcrypt($request->input('password'))
        ]);

        Auth::loginUsingId($user->id);

        return redirect()
                ->route('home')
                ->with('success', 'Вы успешно зарегистрировались');
    }
Пробуем зарегистрироваться и получаем ошибку:

Symfony\Component\Routing\Exception\RouteNotFoundException
Route [home] not defined.
http://localhost/new_project/public/reg
Ну да, контроллер не знает про наш home, разберемся с этим на следующем уроке, а сейчас переходим в базу данных с помощью phpmyadmin и видим там нашего зарегистрированного пользователя:



И теперь, кстати, мы сразу понимаем, почему не заходилось с тестовым логином-паролем, созданным напрямую – так как пароль хранится в БД в зашифрованном (точнее, хэшированном виде). Проверив это, пробуем выйти (удалив куки сайта) и зайти и все получается





Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.



тегистатьи IT, уроки по Laravel, laravel, php, формы

Читайте также:




С++, IE и автоматическая авторизация BASIC Auth
Урок 9. Простое ограничение доступа в Laravel


© upread.ru 2013-2021
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.