Laravel 5.6 - 서명된 경로 및 알림으로 사용자 활성화
23232 단어 phpsignedrouteslaravelnotifications
음.. 라라벨 내부만 가지고 더 간단한 방법이 있습니다.
이 기사에서 다룰 내용:
시작하자!
참고: 컴퓨터에 전역적으로
Laravel/installer
가 설치되어 있다고 가정합니다.우선 깨끗한 애플리케이션이 필요합니다.
laravel new my-project-name
이제 선택한 IDE에서 새 프로젝트를 열 수 있습니다.
프로젝트를 설정하면 실제 "마법"으로 바로 이동할 수 있습니다..!
하지만 우선 애플리케이션에 basic-auth 항목을 추가해야 합니다.
php artisan make:auth
기다리다..! 우리는 무엇을 성취할 것인가?
음.. 간단합니다. Laravel 알림 및 서명된 URL을 사용하여 사용자가 자신의 계정을 확인할 수 있는 간단한 방법을 제공하려고 합니다.
우리가 여기서 하는 일을 더 이상 반복하지 마세요!
부울을 제공하도록 사용자 마이그레이션을 설정하십시오. 나중에 다음 줄을 추가하여 사용자가 확인되었는지 여부를 확인할 수 있습니다.
$table->boolean('is_activated')->default(false);
그런 다음 사용자 마이그레이션은 다음과 같아야 합니다.
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->boolean('is_activated')->default(false);
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
이제 다음과 같이 사용자 모델을 설정해야 합니다.
...
protected $fillable = ['name', 'email', 'password', 'is_activated'];
...
protected $casts = ['is_activated' => 'boolean'];
...
따라서 사용자 모델은 다음과 같아야 합니다.
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'is_activated'
];
protected $casts = [
'is_activated' => 'boolean'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
이제
is_activated
필드를 직접 업데이트할 수 있습니다.다음으로 새 알림이 필요합니다.
php artisan make:notification Users/ActivateEmailNotification
알림으로 이동하겠습니다..
다음에 우리가 하고 싶은 것은 생성된 알림 클래스를 사용하여 사용자가 우리 애플리케이션을 사용하고 싶을 때 클릭해야 하는 링크를 보내는 것입니다(잠시 후에 보여줄 새 기능으로 보호됨). .
이제 URL을 만들어 보겠습니다.
<?php
namespace App\Notifications\Users;
use App\User;
use Illuminate\Support\Facades\URL;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
class ActivateEmailNotification extends Notification
{
use Queueable;
/**
* User Object
*
* @var App\User
*/
public $user;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
$url = URL::signedRoute('activate-email', ['user' => $this->user->id]);
return (new MailMessage)
->subject('Activate your email address')
->line('In order to use the application, please verify your email address.')
->action('Activate your account', $url)
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
Laravel Signed URL Feature을 사용하여 사용자의 URL을 생성합니다. 이를 통해 이메일이 전송된 사용자만 자신의 이메일 주소를 확인할 수 있습니다.
또한 URL은 지정된 시간 동안만 유효하다고 말할 수 있습니다.
이를 위해 URL을 다음에서 변경해야 합니다.
$url = URL::signedRoute('activate-email', ['user' => $this->user->id]);
에게
$url = URL::temporarySignedRoute('activate-email', now()->addMinutes(30), ['user' => $this->user->id]);
이제 URL은 생성 후 30분 동안만 유효합니다.
다음으로
Auth\RegisterController
를 수정해야 합니다.컨트롤러 하단의
'is_active' => false,
메서드에 create
를 추가하기만 하면 됩니다. 같은 방법으로 사용자에게 알릴 것입니다.컨트롤러는 다음과 같이 표시됩니다.
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'is_activated' => false,
'password' => Hash::make($data['password']),
]);
$user->notify(new \App\Notifications\Users\ActivateEmailNotification($user));
return $user; }
}
또한 사용자가 활성화되었는지 여부를 결정하기 위해 미들웨어가 필요합니다.
다음 명령을 사용하여 생성합니다.
php artisan make:middleware CheckUserActivated
다음과 같이 미들웨어를 수정합니다.
<?php
namespace App\Http\Middleware;
use Closure;
class CheckUserActivated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->user()->is_activated) {
return redirect('/not-enabled'); // You can add a route of your choice
}
return $next($request);
}
}
이제 새로운 미들웨어를 커널에 등록해야 합니다.
App\Http\Kernel.php
를 열고 클래스 맨 아래에 있는 routeMiddleware
에 다음을 추가합니다.'active' => \App\Http\Middleware\CheckUserActivated::class,
이 파일에 다른 클래스를 추가해야 합니다.
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
이제 사용자가 활성 상태인지 여부를 확인할 수 있습니다. 그가 활성 상태가 아닌 경우 다른 페이지로 리디렉션하여 사용자에게 이메일에 있는 링크를 사용하여 자신의 계정을 활성화해야 한다는 메모를 추가할 수 있습니다.
알림에서 사용자가 자신의 이메일 주소를 확인할 수 있는 URL을 추가했습니다.
링크를 사용하려면 웹 경로 파일에 이 경로를 추가해야 합니다.
Route::get('/activate-email/{user}', function (Request $request) {
if (!$request->hasValidSignature()) {
abort(401, 'This link is not valid.');
}
$request->user()->update([
'is_activated' => true
]);
return 'Your account is now activated!';
})->name('activate-email');
원하는 경우 이 메서드를 별도의 컨트롤러에 넣을 수 있습니다. 하지만 여기서는 간단하게 유지하고 싶습니다.
이 경로는 사용자를 활성화하고 애플리케이션을 사용할 수 없음을 알려줍니다.
결론
Laravel에서 직접 간단한 도우미를 사용한 사용자 활성화에 대한 이 짧은 튜토리얼이 마음에 드셨기를 바랍니다.
그렇다면 언제든지 이 기사를 공유하고 사랑을 전해주세요 ❤️
그리고 물론 당신이 나를 팔로우하는지 확인하십시오
이 기사의 출처는 GitHub에서 볼 수 있습니다 😺
Reference
이 문제에 관하여(Laravel 5.6 - 서명된 경로 및 알림으로 사용자 활성화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/fwartner/laravel-56---user-activation-with-signed-routes--notifications-oaa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)