设置安全密码
parent
4b73ad7570
commit
830b8131d9
|
|
@ -4,12 +4,48 @@ namespace App\Endpoint\Api\Http\Controllers\Account;
|
|||
|
||||
use App\Endpoint\Api\Http\Controllers\Controller;
|
||||
use App\Exceptions\BizException;
|
||||
use App\Models\SmsCode;
|
||||
use App\Models\Wallet;
|
||||
use App\Services\SmsCodeService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
|
||||
class WalletPasswordController extends Controller
|
||||
{
|
||||
/**
|
||||
* 设置钱包密码
|
||||
*
|
||||
* @param Request $request
|
||||
* @param SmsCodeService $smsCodeService
|
||||
* @return void
|
||||
*/
|
||||
public function update(Request $request, SmsCodeService $smsCodeService)
|
||||
{
|
||||
$input = $request->validate([
|
||||
'verify_code' => ['bail', 'required'],
|
||||
'new_password' => ['bail', 'required', 'size:6'],
|
||||
], [
|
||||
'verify_code' => '验证码',
|
||||
'new_password' => '新密码',
|
||||
]);
|
||||
|
||||
$user = $request->user();
|
||||
|
||||
$smsCodeService->validate(
|
||||
$user->phone,
|
||||
SmsCode::TYPE_SET_WALLET_PASSWORD,
|
||||
$input['verify_code']
|
||||
);
|
||||
|
||||
Wallet::updateOrCreate([
|
||||
'user_id'=> $user->id,
|
||||
], [
|
||||
'password' => $input['new_password'],
|
||||
]);
|
||||
|
||||
return response()->noContent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置安全密码
|
||||
*
|
||||
|
|
|
|||
|
|
@ -2,9 +2,12 @@
|
|||
|
||||
namespace App\Endpoint\Api\Http\Controllers;
|
||||
|
||||
use App\Endpoint\Api\Http\Requests\StoreSmsCodeRequest;
|
||||
use App\Exceptions\BizException;
|
||||
use App\Models\SmsCode;
|
||||
use App\Rules\PhoneNumber;
|
||||
use App\Services\SmsCodeService;
|
||||
use Illuminate\Auth\AuthenticationException;
|
||||
use Illuminate\Http\Request;
|
||||
use Throwable;
|
||||
|
||||
class SmsCodeController extends Controller
|
||||
|
|
@ -12,22 +15,36 @@ class SmsCodeController extends Controller
|
|||
/**
|
||||
* 发送短信验证码
|
||||
*
|
||||
* @param \App\Endpoint\Api\Http\Requests\StoreSmsCodeRequest $request
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \App\Services\SmsCodeService $smsCodeService
|
||||
* @return \Illuminate\Http\Response
|
||||
*
|
||||
* @throws \App\Exceptions\BizException
|
||||
*/
|
||||
public function store(
|
||||
StoreSmsCodeRequest $request,
|
||||
Request $request,
|
||||
SmsCodeService $smsCodeService,
|
||||
) {
|
||||
$type = (int) $request->input('type');
|
||||
|
||||
if (in_array($type, [SmsCode::TYPE_SET_WALLET_PASSWORD])) {
|
||||
if (is_null($user = $request->user())) {
|
||||
throw new AuthenticationException('请先登录', ['api']);
|
||||
}
|
||||
|
||||
$phone = $user->phone;
|
||||
} else {
|
||||
$request->validate([
|
||||
'phone' => ['bail', 'required', new PhoneNumber()],
|
||||
]);
|
||||
|
||||
$phone = $request->input('phone');
|
||||
}
|
||||
|
||||
$code = app()->isProduction() ? mt_rand(100000, 999999) : '666666';
|
||||
|
||||
try {
|
||||
$smsCodeService->send(
|
||||
$request->input('phone'),
|
||||
$request->input('type'),
|
||||
app()->isProduction() ? mt_rand(100000, 999999) : '666666',
|
||||
);
|
||||
$smsCodeService->send($phone, $type, $code);
|
||||
} catch (BizException $e) {
|
||||
throw $e;
|
||||
} catch (Throwable $e) {
|
||||
|
|
|
|||
|
|
@ -1,32 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Endpoint\Api\Http\Requests;
|
||||
|
||||
use App\Rules\PhoneNumber;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class StoreSmsCodeRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function authorize()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function rules()
|
||||
{
|
||||
return [
|
||||
'phone' => ['bail', 'required', new PhoneNumber()],
|
||||
'type' => ['bail', 'required', 'int'],
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
@ -92,6 +92,7 @@ Route::group([
|
|||
// 修改密码
|
||||
Route::post('change-password', ChangePasswordController::class);
|
||||
//安全密码
|
||||
Route::put('wallet-password', [WalletPasswordController::class, 'update']);
|
||||
Route::post('wallet-password/reset', [WalletPasswordController::class, 'reset']);//重置或设置安全密码
|
||||
|
||||
//我的账户
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ class SmsCode extends Model
|
|||
|
||||
public const TYPE_REGISTER = 1;
|
||||
public const TYPE_RESET_PASSWORD = 2;
|
||||
public const TYPE_SET_WALLET_PASSWORD = 3;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
|
|
@ -51,6 +52,7 @@ class SmsCode extends Model
|
|||
public static $allowedTypes = [
|
||||
self::TYPE_REGISTER,
|
||||
self::TYPE_RESET_PASSWORD,
|
||||
self::TYPE_SET_WALLET_PASSWORD,
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -43,10 +43,23 @@ class SmsCodeService
|
|||
throw new BizException(__('Invalid verification code type'));
|
||||
}
|
||||
|
||||
if ($type === SmsCode::TYPE_REGISTER) {
|
||||
if (User::where('phone', $phone)->exists()) {
|
||||
throw new BizException(__('The phone number is already registered'));
|
||||
}
|
||||
$user = User::where('phone', $phone)->first();
|
||||
|
||||
switch ($type) {
|
||||
case SmsCode::TYPE_REGISTER:
|
||||
if ($user) {
|
||||
throw new BizException(__('The phone number is already registered'));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SmsCode::TYPE_RESET_PASSWORD:
|
||||
case SmsCode::TYPE_SET_WALLET_PASSWORD:
|
||||
if ($user === null) {
|
||||
throw new BizException('手机号未注册');
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
if (! $this->cache->add("sms_lock_{$type}_{$phone}", 1, $decaySeconds)) {
|
||||
|
|
@ -58,6 +71,7 @@ class SmsCodeService
|
|||
'code' => $code,
|
||||
'type' => $type,
|
||||
'expires_at' => now()->addSeconds($this->expires),
|
||||
'user_id' => $user->id,
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue