grazulex/laravel-oneclicklogin 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

grazulex/laravel-oneclicklogin

最新稳定版本:v1.0.0

Composer 安装命令:

composer require grazulex/laravel-oneclicklogin

包简介

Passwordless authentication via magic links for Laravel applications - secure, single-use, time-limited URLs for seamless user login.

README 文档

README

Laravel OneClickLogin

Passwordless authentication via magic links for Laravel applications - secure, single-use, time-limited URLs for seamless user login.

A powerful Laravel package for creating passwordless authentication with comprehensive security features and audit trails.

Latest Version Total Downloads License PHP Version Laravel Version Tests Code Style

🚀 Overview

Laravel OneClickLogin is a comprehensive package for implementing passwordless authentication in your Laravel applications. Perfect for creating secure, time-limited magic links that provide seamless user login without passwords, with complete audit trails and advanced security features.

✨ Key Features

  • 🔐 Passwordless Authentication - Replace or complement password-based login
  • Time-Limited Access - Set expiration dates and usage limits
  • 🔒 Security-by-Default - Signed, hashed tokens with short expirations
  • 🚫 Rate Limiting - Per-email and per-IP rate limiting to prevent abuse
  • 🌐 IP & Device Binding - Optional IP address and device fingerprint binding
  • 🔏 Signed URLs - Laravel signed route integration for additional security
  • 🔥 Single-Use Links - Magic links that expire after first successful use
  • 📊 Comprehensive Auditing - Track access patterns, IPs, and timestamps
  • 🛡️ Advanced Security - OTP step-up authentication for suspicious devices
  • 🎭 MultiPersona Integration - Include persona/tenant/role context in links
  • 📧 Flexible Delivery - Support for email, SMS, and custom notification channels
  • 📋 Management API - Revoke and extend links programmatically
  • 🎨 CLI Commands - Full Artisan command support
  • Observability - Built-in logging and metrics integration
  • 🔗 ShareLink Integration - Optional delivery layer with analytics and audit trails
  • 🧪 Test-Friendly - Comprehensive test coverage with easy mocking

📦 Installation

Install the package via Composer:

composer require grazulex/laravel-oneclicklogin

Publish and run the migrations:

php artisan vendor:publish --tag="oneclicklogin-migrations"
php artisan migrate

Optionally, publish the configuration file:

php artisan vendor:publish --tag="oneclicklogin-config"

💡 Auto-Discovery: The service provider will be automatically registered thanks to Laravel's package auto-discovery.

⚡ Quick Start

📖 Need more examples? Check out our Examples Gallery for e-commerce, SPA, and multi-tenant scenarios.

🚀 Basic Usage

use Grazulex\OneClickLogin\Facades\OneClickLogin;

// Send a magic link with expiration
$link = OneClickLogin::to($user)
    ->via('mail')
    ->expireIn(15) // 15 minutes
    ->withContext(['redirect' => '/dashboard'])
    ->send();

echo $link->getSignedUrl(); // https://yourapp.com/login/magic?token=abc123xyz

📧 Email Magic Links

// Send via email with custom context
OneClickLogin::to($user)
    ->via('mail')
    ->expireIn(30) // 30 minutes
    ->maxUses(1)
    ->withContext([
        'redirect' => '/profile',
        'remember' => true
    ])
    ->send();

📱 SMS Magic Links

// Send via SMS
OneClickLogin::to($user)
    ->via('sms')
    ->expireIn(10) // 10 minutes
    ->withContext(['redirect' => '/mobile-dashboard'])
    ->send();

🎭 MultiPersona Integration

// Magic link with persona context
OneClickLogin::to($user)
    ->via('mail')
    ->expireIn(30)
    ->withContext([
        'persona' => 'client',
        'tenant'  => 123,
        'role'    => 'admin',
        'redirect'=> '/admin/dashboard',
        'remember'=> true
    ])
    ->bindIp() // Optional IP binding
    ->bindDevice($request) // Optional device binding
    ->send();

🔥 Advanced Security Features

// Secure magic link with IP restrictions and OTP step-up
OneClickLogin::to($user)
    ->via('mail')
    ->expireIn(15)
    ->bindIp() // Bind to current IP
    ->bindDevice($request) // Bind to device fingerprint
    ->withContext([
        'redirect' => '/secure-area',
        'otp_required' => true // Require OTP for suspicious access
    ])
    ->send();

// Create without sending for custom delivery
$link = OneClickLogin::create($user, [
    'ttl' => 30,
    'context' => ['redirect' => '/billing'],
]);

🔧 Requirements

• PHP 8.3+ • Laravel 11.0+ | 12.0+

📋 Compatibility Matrix: See our Installation Guide for detailed Laravel/PHP compatibility.

📚 Complete Documentation

For comprehensive documentation, examples, and advanced usage guides, visit our Wiki:

📖 👉 Laravel OneClickLogin Wiki

The wiki includes:

🎨 Artisan Commands

Laravel OneClickLogin includes powerful CLI commands for managing your magic links:

# Send a magic link
php artisan oneclicklogin:send user@example.com --via=mail --ttl=15

# List all magic links
php artisan oneclicklogin:list --active --expired

# Revoke a specific link
php artisan oneclicklogin:revoke abc123xyz

# Clean up expired links
php artisan oneclicklogin:prune --days=7

# Test magic link generation
php artisan oneclicklogin:test user@example.com

🔧 Configuration

The package comes with sensible defaults, but you can customize everything:

// config/oneclicklogin.php
return [
    'ttl_minutes' => 15,
    'max_uses' => 1,
    'guard' => 'web',
    
    'security' => [
        'ip_binding' => false,
        'device_binding' => false,
        'enable_otp_step_up' => false,
        'hash_algorithm' => 'sha256',
        'signed_urls' => true,
    ],
    
    'rate_limit' => [
        'issue_per_email_per_hour' => 5,
        'consume_per_ip_per_min' => 20,
    ],
    
    'multi_persona' => [
        'enabled' => true,
        'keys' => ['persona', 'tenant', 'role'],
    ],
];

🔧 Troubleshooting

Common Issue: API vs CLI Discrepancy

If OneClickLogin::for()->generate() fails but CLI commands work, this is typically an environment setup issue, not a package bug:

# Quick fix - ensure clean environment
php artisan migrate:fresh
php artisan cache:clear
php artisan config:clear

# Then test
php artisan tinker
>>> OneClickLogin::for('test@example.com')->generate();

For testing, always use RefreshDatabase:

use Illuminate\Foundation\Testing\RefreshDatabase;

class YourTest extends TestCase {
    use RefreshDatabase; // ← Prevents environment issues
}

👉 Full troubleshooting guide: Wiki Troubleshooting

🧪 Testing

composer test

🤝 Contributing

Please see the Contributing Guide for details.

🔒 Security

If you discover any security-related issues, please email jms@grazulex.be instead of using the issue tracker.

📝 Changelog

Please see the Changelog for more information on what has changed recently.

📄 License

The MIT License (MIT). Please see License File for more information.

👥 Credits

Jean-Marc StrauvenAll Contributors

💬 Support

• 🐛 Report Issues • 💬 Discussions • 📖 Documentation

Laravel OneClickLogin - Passwordless authentication for Laravel applications with comprehensive security features and audit trails.

统计信息

  • 总下载量: 3
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 8
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 8
  • Watchers: 1
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-08-25