worksome/verify-by-phone

通过电话或短信验证您的用户

资助包维护!
worksome

安装: 407 612

依赖项: 0

建议者: 0

安全性: 0

星级: 139

关注者: 14

分支: 6

开放问题: 1

v0.5.1 2024-03-21 09:37 UTC

This package is auto-updated.

Last update: 2024-09-22 09:33:52 UTC


README

PHPStan run-tests

这是一种常见的做法:用户注册,你向他们的手机发送带有代码的短信,他们在你的应用程序中输入该代码,然后他们就可以继续使用了。

这个包使得将此功能添加到Laravel应用程序变得简单。

安装

您可以通过composer安装此包

composer require worksome/verify-by-phone

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

php artisan vendor:publish --tag="verify-by-phone-config"

配置

此包旨在支持多种验证服务。主要服务是 Twilio。您可以在 config/verify-by-phone.php 文件下的 driver 中配置此服务,或者使用专用的 .env 变量:VERIFY_BY_PHONE_DRIVER

twilio

要使用我们的Twilio集成,您需要提供 account_sidauth_tokenverify_sid。所有这些都可以在 config/verify-by-phone.php 文件下的 services.twilio 中设置。

用法

要使用此包,您想将 \Worksome\VerifyByPhone\Contracts\PhoneVerificationService 接口注入到您的应用程序中。让我们想象一下,您想在控制器方法中发送验证代码

public function sendVerificationCode(Request $request, PhoneVerificationService $verificationService)
{
    // Send a verification code to the given number
    $verificationService->send(new PhoneNumber($request->input('phone')));
    
    return redirect(route('home'))->with('message', 'Verification code sent!');
}

就是这样简单!请注意,我们正在使用 \Propaganistas\LaravelPhone\PhoneNumber 安全地解析不同格式的数字。

现在,当用户收到他们的验证代码时,您想检查它是否有效。使用 verify 方法来完成此操作

public function verifyCode(Request $request, PhoneVerificationService $verificationService)
{
    // Verify the verification code for the given phone number
    $valid = $verificationService->verify(
        new PhoneNumber($request->input('phone')), 
        $request->input('code')
    );
    
    if ($valid) {
        // Mark your user as valid
    }
}

第一个参数是电话号码(再次使用 \Propaganistas\LaravelPhone\PhoneNumber),第二个是用户提供的验证代码。

验证规则

我们提供了一个规则,使验证验证代码变得简单。

请注意,此规则将调用 PhoneVerificationService 接口的 verify 方法,并且可能会进行HTTP请求。

Validator::validate($request->all(), [
    'phone_number' => ['required'],
    'verification_code' => ['required', Rule::verificationCodeIsValid('phone_number')],
]);

如果您的数据不包含电话号码,您也可以手动传入

Validator::validate($request->all(), [
    'verification_code' => ['required', Rule::verificationCodeIsValid('+441174960123')],
]);

我们扩展了 Rule 类,以与其他规则保持视觉一致性,但您也可以直接使用 VerificationCodeIsValid 规则,以获得更好的IDE支持

Validator::validate($request->all(), [
    'verification_code' => ['required', new VerificationCodeIsValid('+441174960123')],
]);

此规则还将处理验证代码已过期的情况,并返回适当的错误消息。

Artisan命令

此包附带了一些Artisan命令,允许您发送和验证验证代码。

# Send a verication code to the given phone number
php artisan verify-by-phone:send "+441174960123"

# Check that a given verication code is valid for the given phone number
php artisan verify-by-phone:verify "+441174960123" 1234

如果验证失败,verify命令将在控制台返回失败

测试

在编写测试时,您可能不希望对Twilio等服务进行实际请求。为了支持测试,我们提供了一个 FakeVerificationService,它可以用来模拟验证服务。要使用它,您应该在 phpunit.xml 中设置一个 env 变量,其值如下

<env name='VERIFY_BY_PHONE_DRIVER' value='null'/>

或者,您可以通过使用 swap 方法在测试中手动更换集成。伪造实现有一些有用的测试方法可供使用

it('tests something to do with SMS verification', function () {
    $service = new FakeVerificationService();
    $this->swap(PhoneVerificationService::class, $service);
   
    // Customise what happens when calling `send`
    $service->sendUsing(fn () => throw new Exception('Something went wrong'));
    
    // Customise what happens when calling `verify`
    $service->verifyUsing(fn () => throw new Exception('Something went wrong'));
    
    // Throw a VerificationCodeExpiredException
    $service->actAsThoughTheVerificationCodeExpired();
    
    // Assert that a verification was "sent" on the given number
    $service->assertSentVerification(new PhoneNumber('+441174960123'));
});

您可以通过运行以下命令来执行此项目的测试

composer test

变更日志

有关最近更改的更多信息,请参阅 GitHub Releases

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞,请参阅 我们的安全策略

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件