Files
account/modules/Member/app/Services/AuthService.php
2026-01-18 17:42:46 +08:00

135 lines
3.7 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | SentCMS [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2024 http://www.tensent.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: molong <molong@tensent.cn> <http://www.tensent.cn>
// +----------------------------------------------------------------------
namespace Modules\Member\Services;
use Modules\Member\Models\Member;
use Modules\Member\Events\LoginBefore;
use Modules\Member\Events\LoginEvent;
use Modules\Member\Events\Registered;
class AuthService {
/**
* @title 会员登录
*
* @param [type] $request
* @return void
*/
public function userLogin($request){
$request->validate([
'username' => 'required',
'password' => 'required',
]);
$username = $request->input('username');
$password = $request->input('password');
LoginBefore::dispatch($username, $password);
$token = auth('api')->attempt(['username' => $username, 'password' => $password]);
if (!$token) {
throw new \Exception("登录失败!", 1000);
}else{
LoginEvent::dispatch(auth('api')->user(), $request->input('openid', ''), $request->input('type'));
// 判断是否到期
$user = auth('api')->user();
if(isset($user['level_expire_time']) && $user['level_expire_time'] != ''){
$level_expire_time = strtotime($user['level_expire_time']);
if($level_expire_time < time()){
throw new \Exception("您的會員已到期,請聯系管理員!", 1004);
}
}
return [
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('api')->factory()->getTTL() * 60
];
}
}
/**
* @title UID登录
* @description 提供给第三方登录接口
*
* @param [type] $uid
* @param array $params 第三方登录参数
* @param string $type 第三方登录类型
* @return void
*/
public function userLoginByUid($uid, $params = [], $type = 'wechat'){
$member = Member::find($uid);
if(!$member){
throw new \Exception("用户不存在!", 1000);
}
$token = auth('api')->login($member);
if (!$token) {
throw new \Exception("登录失败!", 1000);
}else{
LoginEvent::dispatch(auth('api')->user(), $params, $type);
return [
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('api')->factory()->getTTL() * 60
];
}
}
/**
* @title 会员注册
*
* @param [type] $request
* @return void
*/
public function userRegister($request){
$request->validate([
'username' => 'required|unique:member,username',
'password' => 'required',
'mobile' => 'nullable|unique:member,mobile',
], [
'username.unique' => '用户名已存在!',
'mobile.unique' => '手机号已存在!',
'username.required' => '用户名不能为空!',
'password.required' => '密码不能为空!'
]);
$member = Member::where('username', '=', $request->input('username'))->first();
if(!$member){
$data = [
'username' => $request->input('username'),
'password' => $request->input('password'),
'nickname' => $request->input('nickname', ''),
'avatar' => $request->input('avatar', ''),
'mobile' => $request->input('mobile', 0),
];
$member = Member::updateOrCreate($data);
}
Registered::dispatch($member, $request->input('openid', ''), $request->input('type', ''));
$token = auth('api')->login($member);
return [
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('api')->factory()->getTTL() * 60
];
}
/**
* @title 会员退出
*
* @param [type] $request
* @return void
*/
public function userLogout($request){
auth('api')->logout();
}
}