|
@@ -6,12 +6,13 @@ use App\JsonRpc\UserServiceInterface;
|
|
|
use App\Tools\CommonService;
|
|
|
use App\Tools\PublicData;
|
|
|
use App\Tools\Result;
|
|
|
+use Hyperf\Context\Context;
|
|
|
use function Hyperf\Support\env;
|
|
|
use Hyperf\Di\Annotation\Inject;
|
|
|
use Hyperf\HttpServer\Annotation\AutoController;
|
|
|
use Hyperf\Validation\Contract\ValidatorFactoryInterface;
|
|
|
use \Phper666\JWTAuth\JWT;
|
|
|
-
|
|
|
+use App\Model\UserToken;
|
|
|
/**
|
|
|
* @AutoController()
|
|
|
*/
|
|
@@ -28,8 +29,6 @@ class LoginController extends AbstractController
|
|
|
private $userServiceClient;
|
|
|
public function login(Jwt $jwt)
|
|
|
{
|
|
|
- var_dump("我要登陆了");
|
|
|
-// $this->logger->info("验证之前");
|
|
|
|
|
|
$reqData = $this->request->all();
|
|
|
$validator = $this->validationFactory->make(
|
|
@@ -38,11 +37,13 @@ class LoginController extends AbstractController
|
|
|
'username' => 'required',
|
|
|
'password' => 'required',
|
|
|
'type' => 'required',
|
|
|
+ 'code' => 'required',
|
|
|
],
|
|
|
[
|
|
|
'username.required' => '用户名不能为空',
|
|
|
'password.required' => '密码不能为空',
|
|
|
'type.required' => '登录方式必填',
|
|
|
+ 'code.required' => 'code方式必填',
|
|
|
]
|
|
|
);
|
|
|
|
|
@@ -50,58 +51,92 @@ class LoginController extends AbstractController
|
|
|
$errorMessage = $validator->errors()->first();
|
|
|
return Result::error($errorMessage);
|
|
|
}
|
|
|
- $comm = new CommonService();
|
|
|
- $ip = $comm->userIp();
|
|
|
+// $comm = new CommonService();
|
|
|
$redis = $this->container->get(\Hyperf\Redis\Redis::class);
|
|
|
- $code = $redis->get('code' . $ip);
|
|
|
+ $code = $redis->get($reqData['code']);
|
|
|
if (empty($code)) {
|
|
|
return Result::error("验证码已过期");
|
|
|
}
|
|
|
- var_dump("验证码:", $code);
|
|
|
- var_dump((strtolower($code) . strtolower($reqData['captcha'])));
|
|
|
+
|
|
|
if (strtolower($code) != strtolower($reqData['captcha'])) {
|
|
|
return Result::error("验证码错误");
|
|
|
}
|
|
|
- //$reqData
|
|
|
$where = [];
|
|
|
if ($reqData['type'] == 1) { //密码登录
|
|
|
$where = [
|
|
|
'user_name' => $reqData['username'],
|
|
|
];
|
|
|
}
|
|
|
-// $this->logger->info("验证之前");
|
|
|
+
|
|
|
$userInfos = $this->userServiceClient->verifyUserInfo($where);
|
|
|
if ($userInfos['code'] == 0) {
|
|
|
return Result::error("用户不存在");
|
|
|
}
|
|
|
-// var_dump("数据:",$userInfos);
|
|
|
+
|
|
|
if($userInfos['data']['status']==0){
|
|
|
return Result::error("用户已经冻结");
|
|
|
}
|
|
|
-// var_dump("用户信息:", $userInfos);
|
|
|
-// $this->logger->info("验证用户返回值:", $userInfos);
|
|
|
+
|
|
|
if (md5(md5($reqData['password']) . $userInfos['data']['salt']) != $userInfos['data']['password']) {
|
|
|
return Result::error("登陆密码错误");
|
|
|
}
|
|
|
+ if($userInfos['data']['type_id']!=10000){
|
|
|
+ $authData = [
|
|
|
+
|
|
|
+ 'id'=>$userInfos['data']['sszq'],
|
|
|
+ 'SiteId'=>Context::get("SiteId")
|
|
|
+ ];
|
|
|
+ var_dump("参数:",$authData);
|
|
|
+ $resultAuth = $this->checkUserAuth($authData);
|
|
|
+
|
|
|
+ if(!$resultAuth){
|
|
|
+ return Result::error("您没有权限登陆此网站");
|
|
|
+ }
|
|
|
+ }
|
|
|
$userData = [
|
|
|
'uid' => $userInfos['data']['id'], // 如果使用单点登录,必须存在配置文件中的sso_key的值,一般设置为用户的id
|
|
|
'user_name' => $userInfos['data']['user_name'],
|
|
|
'mobile' => $userInfos['data']['mobile'],
|
|
|
'email' => $userInfos['data']['email'],
|
|
|
- // 'rong_token' => $userInfos['data']['rong_token'],
|
|
|
'level_id' => $userInfos['data']['level_id'],
|
|
|
'type_id' => $userInfos['data']['type_id'],
|
|
|
];
|
|
|
-// var_dump($userData);
|
|
|
// 使用默认场景登录
|
|
|
$token = $jwt->getToken('default', $userData);
|
|
|
+ // 检查是否有旧的token
|
|
|
+ $old_token = UserToken::where('user_id', $userData['uid'])->first();
|
|
|
+ if (!empty($old_token)) {
|
|
|
+ $jwt->logout($old_token->token);
|
|
|
+ try {
|
|
|
+ $jwt->verifyToken($old_token->token);
|
|
|
+ }catch (\Exception $exception){
|
|
|
+ $code = $exception->getCode();
|
|
|
+ if ($code== 400) {
|
|
|
+ $new_token = UserToken::where('user_id', $userData['uid'])->update(['token' => $token->toString()]);
|
|
|
+ if (empty($new_token)) {
|
|
|
+ return Result::error("Token过期失败!");
|
|
|
+ }
|
|
|
+
|
|
|
+ } else{
|
|
|
+ return Result::error("Token过期失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $usernew_token = $token->toString();
|
|
|
+ $user_token = UserToken::create([
|
|
|
+ 'user_id' => $userData['uid'],
|
|
|
+ 'token' => $usernew_token
|
|
|
+ ]);
|
|
|
+ if (empty($user_token)) {
|
|
|
+ return Result::error("登录失败!");
|
|
|
+ }
|
|
|
+ }
|
|
|
$data = [
|
|
|
'token' => $token->toString(),
|
|
|
'exp' => $jwt->getTTL($token->toString()),
|
|
|
];
|
|
|
return Result::success($data);
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
* @return void
|
|
|
*/
|
|
@@ -281,4 +316,25 @@ class LoginController extends AbstractController
|
|
|
var_dump($h['token'][0], "+++++++++++", $arr, "===####");
|
|
|
return $this->response->json(['code' => 0, 'msg' => 'success', 'data' => ['a' => 1]]);
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检测用户权限
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function checkUserAuth($data)
|
|
|
+ {
|
|
|
+ $websiteGroup = [
|
|
|
+ 'id'=>$data['id']
|
|
|
+ ];
|
|
|
+ $result = $this->userServiceClient->getWebsiteGroupInfo($websiteGroup);
|
|
|
+ if($result['code']==200){
|
|
|
+ if($data['SiteId'] && $result['data']['web_ids']){
|
|
|
+ if(in_array($data['SiteId'],json_decode($result['data']['web_ids'],true))){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|