IT/PHP
Laravel - 이메일 인증
Sungjun_
2021. 5. 6. 19:22
Laravel Jetstream을 이용해 진행하겠습니다.
jetstream.laravel.com/2.x/installation.html
위 링크로 나와있는대로 설치를 진행하는데, livewire로 하겠습니다.
composer require laravel/jetstream
php artisan jetstream:install livewire
npm install
npm run dev
php artisan migrate
새 라라벨 프로젝트에 위 순서로 livewire 설치를 완료해주세요.
설치를 끝내고 register를 보겠습니다.
livewire 기본 회원가입 뷰입니다.
app\Actions\Fortify\CreateNewUser 파일을 여시면 아래와 같은 코드가 나옵니다.
<?php
namespace App\Actions\Fortify;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Laravel\Fortify\Contracts\CreatesNewUsers;
use Laravel\Jetstream\Jetstream;
class CreateNewUser implements CreatesNewUsers
{
use PasswordValidationRules;
/**
* Validate and create a newly registered user.
*
* @param array $input
* @return \App\Models\User
*/
public function create(array $input)
{
Validator::make($input, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => $this->passwordRules(),
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['required', 'accepted'] : '',
])->validate();
return User::create([
'name' => $input['name'],
'email' => $input['email'],
'password' => Hash::make($input['password']),
]);
}
}
일반적인 회원가입 코드와 같아서 넘어가겠습니다.
그 다음으로 User 모델로 가서 MustVerifiedEmail 인터페이스를 구현해줍시다.
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Jetstream\HasProfilePhoto;
use Laravel\Sanctum\HasApiTokens;
class User extends Authenticatable implements MustVerifyEmail
{
use HasApiTokens;
use HasFactory;
use HasProfilePhoto;
use Notifiable;
use TwoFactorAuthenticatable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
'two_factor_recovery_codes',
'two_factor_secret',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = [
'profile_photo_url',
];
}
config/fortify.php 파일로 가서 주석 처리된 부분을 풀어줍니다.
'features' => [
Features::registration(),
Features::resetPasswords(),
// Features::emailVerification(),
Features::updateProfileInformation(),
Features::updatePasswords(),
Features::twoFactorAuthentication([
'confirmPassword' => true,
]),
],
2021.05.04 - Laravel - 이메일 보내기
이전 글을 참고해서 .env 파일과 구글 계정 설정을 해줍니다.
이제 회원가입을 진행해줍니다.
그리고 수신함을 확인해보면 이렇게 인증 메일이 온 것을 확인할 수 있습니다.
버튼을 누르면 아래쪽에 보이는 링크로 연결이 되는데
/email/verify 뒤에 나오는 숫자는 user의 id이고, exipres는 인증 링크가 유효한 시간,
signature는 해쉬 값입니다.
이 부분은 illuminate\Auth\Notifications\VerifyEmail 파일에 있습니다.
protected function verificationUrl($notifiable)
{
if (static::$createUrlCallback) {
return call_user_func(static::$createUrlCallback, $notifiable);
}
return URL::temporarySignedRoute(
'verification.verify',
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
[
'id' => $notifiable->getKey(),
'hash' => sha1($notifiable->getEmailForVerification()),
]
);
}
이것으로 이메일 인증 마치겠습니다.