bombenprodukt/laravel-passage

1Password for Laravel 的 Passage


README

此项目由 Brian Faust 创建并维护,是一个用于将 1Password 的 Passage 集成到 Laravel 的软件包。请确保浏览变更日志行为准则贡献指南许可协议安全策略

安装

注意 此软件包需要 PHP 8.2 或更高版本,并支持 Laravel 10 或更高版本。

要获取最新版本,请使用 Composer 引入项目

$ composer require bombenprodukt/laravel-passage

您可以通过以下命令发布迁移

$ php artisan vendor:publish --tag="laravel-passage-migrations"

您可以通过以下命令发布配置文件

$ php artisan vendor:publish --tag="laravel-passage-config"

用法

请查看 我们的测试套件 以获取详细的用法示例。

示例

通过魔法链接进行身份验证

<?php

declare(strict_types=1);

use App\Models\User;
use BombenProdukt\Passage\Facades\Passage;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::post('/passage/login', function (Request $request): void {
    Passage::authentication()->magicLink()->login($request->get('email'));

    $request->session()->flash('status', 'We have e-mailed your magic link!');

    return redirect()->back();
});

Route::post('/passage/register', function (Request $request): void {
    Passage::authentication()->magicLink()->register($request->get('email'));

    User::create(['email' => $request->get('email')]);

    $request->session()->flash('status', 'We have e-mailed your magic link!');

    return redirect()->back();
});

Route::get('/passage/{YOUR_APP_ID}', function (Request $request) {
    $response = Passage::authentication()->magicLink()->activate($request->query('psg_magic_link'));
    $currentUser = Passage::authentication()->authenticatedUsers($response['auth_token'])->currentUser();

    Auth::login(User::where('email', $currentUser['email'])->firstOrFail());

    $request->session()->flash('status', 'You have been logged in!');

    return redirect($response['redirect_url']);
});

Route::get('/passage/{YOUR_APP_ID}/dashboard', function (Request $request): void {
    return view('dashboard');
});