PHPackages                             wuwx/laravel-scan-login - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. wuwx/laravel-scan-login

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

wuwx/laravel-scan-login
=======================

Laravel Scan Login

v0.1.0(7mo ago)20MITPHPPHP ^8.4CI failing

Since Sep 21Pushed 2mo agoCompare

[ Source](https://github.com/wuwx/laravel-scan-login)[ Packagist](https://packagist.org/packages/wuwx/laravel-scan-login)[ Docs](https://github.com/wuwx/laravel-scan-login)[ RSS](/packages/wuwx-laravel-scan-login/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (13)Versions (2)Used By (0)

Laravel Scan Login
==================

[](#laravel-scan-login)

一个基于 QR 码的 Laravel 扫码登录包，允许用户通过手机扫描二维码快速登录桌面应用。

功能特性
----

[](#功能特性)

- 🔐 **安全的扫码登录**：使用状态机管理登录流程
- 📱 **移动端确认**：手机扫码后在移动端确认登录
- ⚡ **实时状态同步**：实时更新登录状态
- 🎨 **现代化 UI**：响应式界面设计
- 🛡️ **安全防护**：Token 自动过期，防止重放攻击

安装
--

[](#安装)

### 1. 安装包

[](#1-安装包)

```
composer require wuwx/laravel-scan-login
```

### 2. 发布配置文件

[](#2-发布配置文件)

```
php artisan vendor:publish --provider="Wuwx\LaravelScanLogin\ScanLoginServiceProvider"
```

### 3. 配置环境变量

[](#3-配置环境变量)

在 `.env` 文件中添加以下配置（可选）：

```
# Token 过期时间（分钟，默认：5）
SCAN_LOGIN_TOKEN_EXPIRY_MINUTES=5

# QR 码大小（像素，默认：200）
SCAN_LOGIN_QR_CODE_SIZE=200

# QR 码格式（svg 或 png，默认：svg）
SCAN_LOGIN_QR_CODE_FORMAT=svg

# QR 码错误纠正级别（low, medium, quartile, high）
SCAN_LOGIN_QR_CODE_ERROR_CORRECTION=high

# QR 码颜色
SCAN_LOGIN_QR_CODE_FOREGROUND=#000000
SCAN_LOGIN_QR_CODE_BACKGROUND=#ffffff

# 登录成功后的重定向地址（默认：/）
SCAN_LOGIN_SUCCESS_REDIRECT=/dashboard

# 状态轮询间隔（秒，默认：3）
SCAN_LOGIN_POLLING_INTERVAL=3

# Token 长度（字符数，默认：64）
SCAN_LOGIN_TOKEN_LENGTH=64

# 启用/禁用扫码登录功能（默认：true）
SCAN_LOGIN_ENABLED=true

# 启用/禁用 GeoIP 地理位置显示（默认：true）
SCAN_LOGIN_ENABLE_GEOIP=true
```

### 4. 配置 GeoIP（可选）

[](#4-配置-geoip可选)

本包使用 `torann/geoip` 来显示登录地理位置信息。首先发布 GeoIP 配置文件：

```
php artisan vendor:publish --provider="Torann\GeoIP\GeoIPServiceProvider" --tag=config
```

然后更新 GeoIP 数据库：

```
php artisan geoip:update
```

如果不需要地理位置功能，可以在 `.env` 中设置：

```
SCAN_LOGIN_ENABLE_GEOIP=false
```

### 5. 运行迁移

[](#5-运行迁移)

```
php artisan migrate
```

使用方法
----

[](#使用方法)

安装完成后，包会自动注册路由：

- `/scan-login` - 桌面端二维码登录页面
- `/scan-login/{token}` - 移动端确认登录页面

### 基本使用

[](#基本使用)

1. **桌面端**：用户访问 `/scan-login` 页面，系统会显示二维码
2. **移动端**：用户扫描二维码后，会跳转到确认页面
3. **确认登录**：用户在移动端确认后，桌面端自动完成登录

登录流程
----

[](#登录流程)

### 1. 桌面端流程

[](#1-桌面端流程)

1. 用户访问扫码登录页面
2. 系统生成 QR 码，包含登录链接
3. 用户使用手机扫描 QR 码
4. 系统轮询检查登录状态
5. 登录成功后自动跳转

### 2. 移动端流程

[](#2-移动端流程)

1. 用户扫描 QR 码
2. 跳转到移动端确认页面（需要登录）
3. 显示登录设备信息
4. 用户确认或取消登录
5. 桌面端自动完成登录

自定义视图
-----

[](#自定义视图)

### 发布视图文件

[](#发布视图文件)

```
php artisan vendor:publish --provider="Wuwx\LaravelScanLogin\ScanLoginServiceProvider" --tag="views"
```

视图文件位于 `resources/views/vendor/scan-login/`：

- `livewire/pages/qr-code-login-page.blade.php` - 桌面端二维码页面
- `livewire/pages/mobile-login-confirm-page.blade.php` - 移动端确认页面

事件系统
----

[](#事件系统)

本包提供了完整的事件系统，允许你在登录流程的各个阶段执行自定义逻辑。

### 可用事件

[](#可用事件)

- `ScanLoginTokenCreated` - Token 创建时触发
- `ScanLoginTokenClaimed` - 二维码被扫描时触发
- `ScanLoginTokenConsumed` - 登录成功时触发
- `ScanLoginTokenCancelled` - 用户取消登录时触发
- `ScanLoginTokenExpired` - Token 过期时触发

### 监听事件示例

[](#监听事件示例)

在 `app/Providers/EventServiceProvider.php` 中注册监听器：

```
use Wuwx\LaravelScanLogin\Events\ScanLoginTokenConsumed;
use App\Listeners\SendLoginNotification;

protected $listen = [
    ScanLoginTokenConsumed::class => [
        SendLoginNotification::class,
    ],
];
```

创建监听器：

```
