小程序用户改用门店登录
This commit is contained in:
@@ -3,10 +3,7 @@
|
||||
namespace App\Http\Controllers\Mini;
|
||||
|
||||
use App\Exceptions\RepositoryException;
|
||||
use App\Http\Requests\UserUpdateInfoRequest;
|
||||
use App\Models\StoreModel;
|
||||
use App\Models\UserModel;
|
||||
use App\Services\WechatService;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Modules\AnnoRoute\Attribute\GetRoute;
|
||||
@@ -15,113 +12,79 @@ use Modules\AnnoRoute\Attribute\PutRoute;
|
||||
use Modules\AnnoRoute\Attribute\RequestAttribute;
|
||||
|
||||
/**
|
||||
* 小程序认证
|
||||
* 小程序认证(门店 账号 + 密码 登录,不再使用微信能力)
|
||||
*/
|
||||
#[RequestAttribute('/mini', 'mini', authGuard: 'users')]
|
||||
class AuthController extends BaseMiniController
|
||||
{
|
||||
/** 小程序登录 */
|
||||
/** 门店登录(账号 + 密码) */
|
||||
#[PostRoute('/auth/login', authorize: false)]
|
||||
public function login(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'code' => 'required|string'
|
||||
'username' => 'required|string|max:20',
|
||||
'password' => 'required|string|max:20',
|
||||
], [
|
||||
'code.required' => '登录参数格式错误',
|
||||
'code.string' => '登录参数格式错误',
|
||||
'username.required' => '请输入登录账号',
|
||||
'password.required' => '请输入登录密码',
|
||||
]);
|
||||
|
||||
$session = app(WechatService::class)->code2Session($validated['code']);
|
||||
$store = StoreModel::where('username', $validated['username'])->first();
|
||||
|
||||
$user = UserModel::where('openid', $session['openid'])->first();
|
||||
|
||||
if ($user === null || $user->status === UserModel::STATUS_DISABLED) {
|
||||
return $this->error('账号不存在或已被停用');
|
||||
if ($store === null || ! password_verify($validated['password'], (string) $store->password)) {
|
||||
return $this->error('账号或密码错误');
|
||||
}
|
||||
if ($store->status === StoreModel::STATUS_DISABLED) {
|
||||
return $this->error('账号已被停用,请联系客服处理');
|
||||
}
|
||||
|
||||
$user->last_login_at = date('Y-m-d H:i:s');
|
||||
$user->save();
|
||||
$token = $user->createToken($user->openid)->toArray();
|
||||
return $this->success([
|
||||
'token' => $token['plainTextToken'],
|
||||
'user' => $user->toArray(),
|
||||
], __('user.login_success'));
|
||||
$store->last_login_at = date('Y-m-d H:i:s');
|
||||
$store->save();
|
||||
|
||||
}
|
||||
|
||||
/** 小程序注册 */
|
||||
#[PostRoute('/auth/register', authorize: false)]
|
||||
public function register(Request $request): JsonResponse
|
||||
{
|
||||
$validated = $request->validate([
|
||||
'code' => 'required|string',
|
||||
'phoneCode' => 'required|string',
|
||||
'storeCode' => 'required|string'
|
||||
], [
|
||||
'code.required' => '注册参数格式错误',
|
||||
'code.string' => '注册参数格式错误',
|
||||
'phoneCode.required' => '注册参数格式错误',
|
||||
'phoneCode.string' => '注册参数格式错误',
|
||||
'storeCode.required' => '门店编码必须填写',
|
||||
'storeCode.string' => '注册参数格式错误',
|
||||
]);
|
||||
|
||||
$store = StoreModel::where('code', $validated['storeCode'])->first();
|
||||
if (!$store) {
|
||||
return $this->error('门店不存在!');
|
||||
}
|
||||
|
||||
// 通过 code 换取 openid、session_key、unionid
|
||||
$session = app(WechatService::class)->code2Session($validated['code']);
|
||||
|
||||
$user = UserModel::where('openid', $session['openid'])->first();
|
||||
|
||||
if ($user) {
|
||||
return $this->error('你的微信已经注册,请直接登录!');
|
||||
}
|
||||
|
||||
$userData = [
|
||||
'openid' => $session['openid'],
|
||||
'unionid' => $session['unionid'] ?? '',
|
||||
'username' => 'wx_'.uniqid(),
|
||||
'nickname' => '微信用户',
|
||||
'store_id' => $store->id,
|
||||
'avatar' => '',
|
||||
'password' => '',
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
|
||||
$phone = app(WechatService::class)->getPhone($validated['phoneCode']);
|
||||
$userData['phone'] = $phone ?? '';
|
||||
|
||||
$user = UserModel::create($userData);
|
||||
|
||||
$token = $user->createToken($user->username)->toArray();
|
||||
$token = $store->createToken($store->username)->toArray();
|
||||
$store->load('level:id,name');
|
||||
|
||||
return $this->success([
|
||||
'token' => $token['plainTextToken'],
|
||||
'user' => $user->toArray(),
|
||||
'user' => $store->toArray(),
|
||||
], __('user.login_success'));
|
||||
}
|
||||
|
||||
/** 当前用户信息 */
|
||||
/** 当前门店信息(含客户等级) */
|
||||
#[GetRoute('/auth/info')]
|
||||
public function info(Request $request): JsonResponse
|
||||
{
|
||||
$user = UserModel::with(['store.level:id,name'])
|
||||
->find($request->user()->id);
|
||||
if ($user === null) {
|
||||
$store = StoreModel::with('level:id,name')->find($request->user()->id);
|
||||
if ($store === null) {
|
||||
throw new RepositoryException('账号不存在');
|
||||
}
|
||||
|
||||
return $this->success($user->toArray());
|
||||
return $this->success($store->toArray());
|
||||
}
|
||||
|
||||
#[PutRoute('auth/info')]
|
||||
public function setUserInfo(UserUpdateInfoRequest $request): JsonResponse
|
||||
/** 修改登录密码 */
|
||||
#[PutRoute('/auth/password')]
|
||||
public function setPassword(Request $request): JsonResponse
|
||||
{
|
||||
UserModel::where('user_id', auth('user')->id())->update($request->validated());
|
||||
$data = $request->validate([
|
||||
'oldPassword' => 'required|string|max:20',
|
||||
'newPassword' => 'required|string|min:6|max:20',
|
||||
'rePassword' => 'required|same:newPassword',
|
||||
], [
|
||||
'oldPassword.required' => '请输入原密码',
|
||||
'newPassword.required' => '请输入新密码',
|
||||
'newPassword.min' => '新密码至少 6 位',
|
||||
'rePassword.same' => '两次输入的密码不一致',
|
||||
]);
|
||||
|
||||
return $this->error('更新成功');
|
||||
$store = $this->currentStore($request);
|
||||
if (! password_verify($data['oldPassword'], (string) $store->password)) {
|
||||
return $this->error('原密码不正确');
|
||||
}
|
||||
|
||||
$store->password = password_hash($data['newPassword'], PASSWORD_DEFAULT);
|
||||
$store->save();
|
||||
|
||||
return $this->success([], '密码修改成功');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user