кодесурса
«Laravel

Laravel (5.7) Сброс пароля

script1adsense2code
script1adsense3code

Основы аутентификации Laravel

В этом разделе мы собираемся использовать ремесленника для создания основы аутентификации.

Запустите следующую команду

php artisan make:auth

ВОТ,

Приведенная выше команда сгенерирует все необходимые маршруты и контроллеры, необходимые для полной системы аутентификации.

Настройка маршрутов аутентификации Laravel

Команда make: auth изменила наши маршруты /routes/web.php и добавила следующую строку

Auth::routes();

ВОТ,

Маршруты (); Метод генерирует все необходимые для нас маршруты аутентификации.

Метод маршрутов (); реализован в ядре фреймворка в файле

/vendor/laravel/framework/src/Illuminate/Routing/Router.php

public function auth()
{
    // Authentication Routes...
    $this->get('login', 'Auth\[email protected]')->name('login');
    $this->post('login', 'Auth\[email protected]');
    $this->post('logout', 'Auth\[email protected]')->name('logout');
    // Registration Routes...
    $this->get('register', 'Auth\[email protected]')->name('register');
    $this->post('register', 'Auth\[email protected]');
    // Password Reset Routes...
    $this->get('password/reset', 'Auth\[email protected]');
    $this->post('password/email', 'Auth\[email protected]');
    $this->get('password/reset/{token}', 'Auth\[email protected]');
    $this->post('password/reset', 'Auth\[email protected]');
}

Как видно из приведенного выше кода, пути URL жестко закодированы. Это хорошо работает для базового приложения, но мы хотим, чтобы наши маршруты были с префиксом администратора.

В дополнение к префиксу администратора, мы не хотим включать маршруты регистрации для пользователей панели администратора, а у маршрута сброса пароля нет имени.

Мы можем изменить пути в ядре фреймворка, и наше приложение будет работать нормально, но что произойдет, когда вы обновите версию Laravel?

Скорее всего, ваши изменения будут отменены, и вы должны будете помнить, какие файлы вы изменили. Альтернатива - написать свои собственные маршруты в /routes/web.php и оставить основной файл в фреймворке таким, какой он есть.

замещать

Auth::routes 
with
Route::group(['prefix' => 'admin','namespace' => 'Auth'],function(){
    // Authentication Routes...
    Route::get('login', '[email protected]')->name('login');
    Route::post('login', '[email protected]');
    Route::post('logout', '[email protected]')->name('logout');
    // Password Reset Routes...
    Route::get('password/reset', '[email protected]')->name('password.reset');
    Route::post('password/email', '[email protected]')->name('password.email');
    Route::get('password/reset/{token}', '[email protected]')->name('password.reset.token');
    Route::post('password/reset', '[email protected]');
});

ВОТ,

Route::group(['prefix' => 'admin','namespace' =>

'Auth'], function () {} определяет групповой маршрут с префиксом admin и пространством имен Auth.

Route :: get, Route :: post реплицирует маршруты, сгенерированные командой artisan make: auth, за исключением маршрутов, необходимых для регистрации нового пользователя.

Примечание: мы также установили имена маршрутов для маршрутов сброса пароля

Настройка Laravel Authentication Views

Леса сгенерированные представления логин и пароль сброса. Мы хотим иметь возможность работать с представлениями входа в систему из нашего шаблона администратора.

Представления аутентификации находятся в / resources / views / auth

Замените содержимое /resources/views/auth/login.php следующим

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- Meta, title, CSS, favicons, etc. -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Larashop Admin Login</title>
        <!-- Bootstrap -->
        <link href="{{asset('admin/css/bootstrap.min.css')}}" rel="stylesheet">
        <!-- Font Awesome -->
        <link href="{{asset('admin/css/font-awesome.min.css')}}" rel="stylesheet">
        <!-- NProgress -->
        <link href="{{asset('admin/css/nprogress.css')}}" rel="stylesheet">
        <!-- Animate.css -->
        <link href="{{asset('admin/css/animate.min.css')}}" rel="stylesheet">
        <!-- Custom Theme Style -->
        <link href="{{asset('admin/css/custom.min.css')}}" rel="stylesheet">
    </head>
    <body class="login">
        <div>
            <div class="login_wrapper">
                <div class="animate form login_form">
                    <section class="login_content">
                        <form role="form" method="POST" action="{{ route('login') }}">
                            <h1>Larashop | Login</h1>
                            {{ csrf_field() }}
                            <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                                @if ($errors->has('email'))
                                <span class="help-block"><strong>{{ $errors->first('email') }}</strong></span>
                                @endif
                                <input type="text" class="form-control" id="email" name="email" placeholder="Email"/>
                            </div>
                            <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                                @if ($errors->has('password'))
                                <span class="help-block"><strong>{{ $errors->first('password') }}</strong></span>
                                @endif
                                <input type="password" class="form-control" id="password" name="password" placeholder="Password"/>
                            </div>
                            <div>
                                <button type="submit" class="btn btn-default submit">Login</button>
                                <a class="reset_pass" href="{{route('password.reset')}}">Lost your password?</a>
                            </div>
                            <div class="clearfix"></div>
                            <div class="separator">
                                <div class="clearfix"></div>
                                <br />
                                <div>
                                    <h1><i class="fa fa-paw"></i> Larashop Admin Panel</h1>
                                    <p>©2017 All Rights Reserved. Brough to you by <a href="https://w3resource.com" target="_blank">Kode Blog Tutorials</a></p>
                                </div>
                            </div>
                        </form>
                    </section>
                </div>
            </div>
        </div>
    </body>
</html>

ВОТ,

<form role = "form" method = "POST" action = "{{route ('login')}}"> задает для метода формы значение POST, а для действия - путь к указанному имени входа в систему

{{csrf_field ()}} добавляет маркер подделки межсайтовых запросов

<input type = "text" class = "form-control" id = "email" name = "email" placeholder = "Email" /> определяет поле электронной почты с идентификатором и именем электронной почты

<input type = "password" class = "form-control" id = "password" name = "password" placeholder = "Password" /> определяет поле пароля с идентификатором и именем пароля

<button type = "submit" class = "btn btn-default submit"> Логин </ button> отправляет форму

<a class="reset_pass" href=" average карлиточному устройству('password.reset') innovative rout"> Забыли пароль? </a> отображает ссылку для сброса пароля. В пути сброса пароля используется именованный маршрут password.reset. это позволяет легко обновить ссылку для сброса пароля, не меняя ничего в представлениях.

Это все, что нам нужно для входа.

Давайте теперь посмотрим на просмотр паролей в

/ ресурсы / виды / аутентификации / пароли. У нас есть два мнения, а именно;

email.blade.php - используется для отображения формы, которая запрашивает у пользователя адрес электронной почты, который следует использовать при отправке ссылки на сброс.

reset.blade.php - используется для отображения формы, которую пользователь будет использовать для сброса пароля.

Замените содержимое email.blade.php следующим

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- Meta, title, CSS, favicons, etc. -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Larashop Admin Login</title>
        <!-- Bootstrap -->
        <link href="{{asset('admin/css/bootstrap.min.css')}}" rel="stylesheet">
        <!-- Font Awesome -->
        <link href="{{asset('admin/css/font-awesome.min.css')}}" rel="stylesheet">
        <!-- NProgress -->
        <link href="{{asset('admin/css/nprogress.css')}}" rel="stylesheet">
        <!-- Animate.css -->
        <link href="{{asset('admin/css/animate.min.css')}}" rel="stylesheet">
        <!-- Custom Theme Style -->
        <link href="{{asset('admin/css/custom.min.css')}}" rel="stylesheet">
    </head>
    <body class="login">
        <div>
            <a class="hiddenanchor" id="signup"></a>
            <a class="hiddenanchor" id="lostpassword"></a>
            <div class="login_wrapper">
                <div class="animate form login_form">
                    <section class="login_content">
                        @if (session('status'))
                        <div class="alert alert-success">
                            {{ session('status') }}
                        </div>
                        @endif
                        <form class="form-horizontal" role="form" method="POST" action="{{ route('password.email') }}">
                            <h1>Password Reset</h1>
                            {{ csrf_field() }}
                            <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                                @if ($errors->has('email'))
                                <span class="help-block"><strong>{{ $errors->first('email') }}</strong></span>
                                @endif
                                <input type="text" class="form-control" id="email" name="email" placeholder="Email"/>
                            </div>
                            <div>
                                <button type="submit" class="btn btn-default submit">Send Password Reset Link</button>
                                <a class="reset_pass" href="{{route('login')}}">Login</a>
                            </div>
                            <div class="clearfix"></div>
                            <div class="separator">
                                <div class="clearfix"></div>
                                <br />
                                <div>
                                    <h1><i class="fa fa-paw"></i> Larashop Admin Panel</h1>
                                    <p>©2017 All Rights Reserved.</p>
                                </div>
                            </div>
                        </form>
                    </section>
                </div>
            </div>
        </div>
    </body>
</html>

ВОТ,

@if (session ('status')) проверяет, установлен ли для сеанса статус, и отображает его с помощью предупреждений начальной загрузки.

<form class = "form-горизонтальный" role = "form" method = "POST" action = "{{route ('password.email')}}"> устанавливает для метода формы значение POST, а action - путь к указанному Маршрут password.email

{{csrf_field ()}} добавляет поля подделки кросс-сайтов

<input type = "text" class = "form-control" id = "email" name = "email" placeholder = "Email" /> добавляет поле ввода электронной почты, которое пользователь будет использовать для ввода адреса электронной почты, где находится ссылка для сброса должно быть отправлено.

<button type = "submit" class = "btn btn-default submit"> Отправить ссылку для сброса пароля </ button> отправляет форму.

<a class="reset_pass" href=" average карлиточному устройству('login') enjcasts"> Вход </a> включает ссылку для входа на страницу сброса электронной почты на тот случай, если пользователь решит вернуться на страницу входа.

Замените содержимое файла reset.blade.php следующим

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <!-- Meta, title, CSS, favicons, etc. -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Larashop Admin | Password Reset</title>
        <!-- Bootstrap -->
        <link href="{{asset('admin/css/bootstrap.min.css')}}" rel="stylesheet">
        <!-- Font Awesome -->
        <link href="{{asset('admin/css/font-awesome.min.css')}}" rel="stylesheet">
        <!-- NProgress -->
        <link href="{{asset('admin/css/nprogress.css')}}" rel="stylesheet">
        <!-- Animate.css -->
        <link href="{{asset('admin/css/animate.min.css')}}" rel="stylesheet">
        <!-- Custom Theme Style -->
        <link href="{{asset('admin/css/custom.min.css')}}" rel="stylesheet">
    </head>
    <body class="login">
        <div>
            <a class="hiddenanchor" id="signup"></a>
            <a class="hiddenanchor" id="lostpassword"></a>
            <div class="login_wrapper">
                <div class="animate form login_form">
                    <section class="login_content">
                        @if (session('status'))
                        <div class="alert alert-success">
                            {{ session('status') }}
                        </div>
                        @endif
                        <form role="form" method="POST" action="{{ route('password.reset') }}">
                            <h3>Reset Password</h3>
                            {{ csrf_field() }}
                            <input type="hidden" name="token" value="{{ $token }}">
                            <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                                @if ($errors->has('email'))
                                <span class="help-block"><strong>{{ $errors->first('email') }}</strong></span>
                                @endif
                                <input type="text" class="form-control" id="email" name="email" placeholder="Email"/>
                            </div>
                            <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                                @if ($errors->has('password'))
                                <span class="help-block"><strong>{{ $errors->first('password') }}</strong></span>
                                @endif
                                <input type="password" class="form-control" id="password" name="password" placeholder="Password"/>
                            </div>
                            <div class="form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}">
                                @if ($errors->has('password_confirmation'))
                                <span class="help-block"><strong>{{ $errors->first('password_confirmation') }}</strong></span>
                                @endif
                                <input type="password_confirmation" class="form-control" id="password_confirmation" name="password_confirmation" placeholder="Confirm Password"/>
                            </div>
                            <div>
                                <button type="submit" class="btn btn-default submit">Reset Password</button>
                            </div>
                            <div class="clearfix"></div>
                            <div class="separator">
                                <div class="clearfix"></div>
                                <br />
                                <div>
                                    <h1><i class="fa fa-paw"></i> Larashop Admin Panel</h1>
                                    <p>©2017 All Rights Reserved.</p>
                                </div>
                            </div>
                        </form>
                    </section>
                </div>
            </div>
        </div>
    </body>
</html>

ВОТ,

Объяснение для reset.blade.php почти такое же, как и у других представлений, которые мы рассмотрели ранее.

Настраиваемый Email Reset Notification

Зачем нам нужно настраивать уведомление по электронной почте о восстановлении пароля? Потому что URL для сброса пароля жестко запрограммирован как домен / пароль / сброс. Мы хотим иметь возможность использовать путь домен / admin / пароль / сброс.

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

php artisan make:notification LarashopAdminResetPassword

Приведенная выше команда создаст каталог уведомлений в каталоге приложения. Это также создаст файл

Приложение / Уведомления / LarashopAdminResetPassword.php

Замените содержимое LarashopAdminResetPassword.php следующим

<?php
namespace Larashop\Notifications;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class LarashopAdminResetPassword extends Notification
{
    public function __construct($token)
    {
        $this->token = $token;
    }
    public function via($notifiable)
    {
        return ['mail'];
    }
    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', route('password.reset.token',['token' => $this->token]))
            ->line('If you did not request a password reset, no further action is required.');
    }
}

ВОТ,

Метод public функции toMail ($ notifiable) {...} использует именованный маршрут password.reset.token route ('password.reset.token', ['token' => $ this-> token]) для создания пути для токена сброса пароля.

Laravel отправляет поддельные SMTP-письма

В этом разделе мы рассмотрим, как использовать mailtrap.io для отправки писем в Laravel. В двух словах, вы создадите

учетную запись с mailtrap (бесплатная версия с ограничением 50 писем в папке «Входящие»), а также настройку конфигурации электронной почты. Все электронные письма, отправленные из приложения, будут отправлены на Ваш почтовый ящик. Mailtrap только для разработки.

Visithttps: //mailtrap.io/, чтобы создать бесплатный аккаунт

После входа в систему вы сможете увидеть демонстрационный почтовый ящик

Вкладка настроек предоставит вам имя пользователя и пароль, которые вам нужно будет настроить в mailtrap.

Открыть файл .env

Установите следующие настройки почты

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=replace_with_your_username
MAIL_PASSWORD=replace_with_your_password

Учетная запись по умолчанию

Мы будем использовать тинкер для создания новой учетной записи

Выполнить команды ремесленника

$user = new Larashop\Models\User
$user->name ="Rodrick Kazembe"
$user->password = bcrypt('ceasar')
$user->save()

Теперь вы можете попытаться войти в систему, используя данные учетной записи, которые мы только что создали. Вы также можете попробовать другие функции, такие как сброс пароля.

Предыдущая: Пример учебника по проверке электронной почты Laravel (5.7)
Следующая: Laravel (5.7) Artisan Console

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code