라라벨 비밀번호 없는 인증

비밀번호 없는 인증은 사용자가 비밀번호를 입력하지 않고 앱에 액세스하는 방법입니다. 위험한 암호 관리 관행을 줄이고 자격 증명 도용 공격을 방지하는 가장 효과적인 방법입니다.



위는 Passwordless 인증 흐름의 아키텍처 다이어그램입니다.

이 laravel 패키지laravel-passwordless-authentication를 사용하여 인증을 위해 사용자의 이메일 주소에 매직 링크를 전송하여 암호 없는 인증을 구현합니다.

설치



새로운 Laravel 애플리케이션 설정

composer create-project laravel/laravel passwordless-app


스캐폴드 빠른 UI에 설치Laravel Breeze

composer require laravel/breeze --dev

php artisan breeze:install

php artisan migrate
npm install
npm run dev


암호 없는 패키지를 설치하고 지침에 따라 패키지를 설정하십시오.

composer require norbybaru/passwordless-auth

php artisan vendor:publish --provider="NorbyBaru\Passwordless\PasswordlessServiceProvider" --tag="passwordless-config"
php artisan vendor:publish --provider="NorbyBaru\Passwordless\PasswordlessServiceProvider" --tag="passwordless-migrations"

php artisan migrate


1. 메일 드라이버 설정



mailtrap.io으로 메일 드라이버를 설정합니다. 아래 값을 .env에 복사하고 MAIL_USERNAMEMAIL_PASSWORD를 mailtrap.io의 올바른 자격 증명으로 바꿉니다.

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"


2. 사용자 모델 설정



모델에서 CanUsePasswordlessAuthenticatable::class를 확장하고 PasswordlessAuthenticatable::class를 구현하여 laravel-passwordless-authentication 패키지와 함께 작동하도록 사용자 모델을 설정합니다.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use NorbyBaru\Passwordless\CanUsePasswordlessAuthenticatable;
use NorbyBaru\Passwordless\Traits\PasswordlessAuthenticatable;

class User extends Authenticatable implements CanUsePasswordlessAuthenticatable
{
    use HasApiTokens, HasFactory, Notifiable, PasswordlessAuthenticatable;
...
}


3. 로그인 양식



사용자의 이메일 주소만 식별자로 캡처하여 로그인에 매직 링크를 보내도록 로그인 양식을 업데이트하십시오.



4. 로그인 경로


routes/auth.php에서 로그인 경로를 업데이트하여 이메일 주소를 요구하고 laravel-passwordless-authentication 패키지를 사용하여 매직 링크 토큰을 보냅니다.

Route::post('login', function (Request $request) {
        $validated = $request->validate([
            'email' => 'required|email|exists:users|max:255',
        ]);

        $status = Passwordless::magicLink()->sendLink($validated);

        return redirect()->back()->with([
            'status' => trans($status)
        ]);
    });


5. 번역 업데이트



사용자에게 매직 링크를 보내는 응답 상태에 따라 사용자에게 올바른 메시지를 다시 표시하려면 다음 값을 사용하여 변환 디렉터리passwordless.php 아래에 파일lang/en/passwordless.php을 추가합니다.

<?php

return [
    'sent' => 'Login link sent to inbox.',
    'throttled' => 'Login link was already sent. Please check your inbox or try again later.',
    'invalid_token' => 'Invalid link supplied. Please request new one.',
    'invalid_user' => 'Invalid user info supplied.',
    'verified' => 'Login successful.',
];


최종 단계



애플리케이션을 시작하고 로그인 흐름을 테스트하기 위해 더미 사용자를 생성하거나 시드해야 합니다.

좋은 웹페이지 즐겨찾기