redirect(); } public function callback($type,Request $request,Guard $auth){ $oauthUser = Socialite::driver($type)->user(); if(!$oauthUser){ abort(500); } $refresh_token = ''; if(isset($oauthUser->accessTokenResponseBody['refresh_token'])){ $refresh_token = $oauthUser->accessTokenResponseBody['refresh_token']; } if( Auth()->check() ){ //用户登录时处理绑定请求 $request->user()->userOauth()->where("auth_type",'=',$type)->delete(); UserOauth::where('id','=',$oauthUser->id)->delete(); $userOauth = UserOauth::create([ 'id'=>$oauthUser->id, 'auth_type'=>$type, 'user_id'=> $request->user()->id, 'nickname'=>$oauthUser->nickname, 'avatar'=>$oauthUser->avatar, 'access_token'=>$oauthUser->accessTokenResponseBody['access_token'], 'refresh_token'=>$refresh_token, 'expires_in'=>$oauthUser->accessTokenResponseBody['expires_in'], ]); if($userOauth){ return $this->success( route('auth.profile.oauth') , $type .'绑定成功!'); } return $this->error(route('auth.profile.oauth'),'绑定失败请稍后重试!'); } //游客登录处理注册流程 $userOauth = UserOauth::find($oauthUser->id); if( $userOauth && $userOauth->user_id > 0 ){ $auth->loginUsingId($userOauth->user_id); if($this->credit($request->user()->id,'login',Setting()->get('coins_login'),Setting()->get('credits_login'))){ $message = '登陆成功! '.get_credit_message(Setting()->get('credits_login'),Setting()->get('coins_login')); return $this->success(route('website.index'),$message); } /*认证成功后跳转到首页*/ return redirect()->to(route('website.index')); } UserOauth::where('id','=',$oauthUser->id)->delete(); $oauthData = UserOauth::create([ 'id'=>$oauthUser->id, 'auth_type'=>$type, 'user_id'=> 0, 'nickname'=>$oauthUser->nickname, 'avatar'=>$oauthUser->avatar, 'access_token'=>$oauthUser->accessTokenResponseBody['access_token'], 'refresh_token'=>$refresh_token, 'expires_in'=>$oauthUser->accessTokenResponseBody['expires_in'], ]); if($oauthData){ return redirect(route('auth.oauth.profile',['auth_id'=>$oauthUser->id])); } return $this->error(route('auth.profile.oauth'),$type.'登录错误,请稍后再试!'); } public function unbind( $type , Request $request){ $request->user()->userOauth()->where('auth_type','=',$type)->delete(); return $this->success( route('auth.profile.oauth') , $type .'已解除绑定!'); } public function profile($auth_id) { $userOauth = UserOauth::find($auth_id); if(!$userOauth){ abort(404); } return view('theme::account.oauth')->with(compact('userOauth')); } public function register(Request $request,UserRepository $userRepository,Guard $auth,OauthRepository $oauthRepository) { $validateRules['name'] = 'required|min:2|max:100'; $request->flash(); if(Setting()->get('register_type') == 'email'){ $validateRules['email'] = 'required|email|max:255|unique:users'; }else{ $validateRules['mobile'] = 'required|regex:/^1[3456789]\d{9}$/'; $validateRules['code'] = 'required|min:4|:max:8'; } /*表单数据校验*/ $this->validate($request,$validateRules); $formData = $request->all(); $formData['password'] = 'oauth'; $formData['status'] = 0; $formData['visit_ip'] = $request->getClientIp(); /*手机模式认证*/ $user = []; if( Setting()->get('register_type') == 'mobile' ){ if( !SmsService::verifySmsCode($formData['mobile'],$request->input('code')) ) { return view("theme::account.register")->withErrors(['code'=>'验证码错误']); } $formData['status'] = 1; $user = User::where("mobile","=",$formData['mobile'])->where("status","=",1)->first(); } if(!$user){ $user = $userRepository->register($formData); $user->attachRole(2); //默认注册为普通用户角色 } $oauthRepository->bind($formData['auth_id'],$user->id); $auth->login($user); $message = '登录成功!'; if($this->credit($request->user()->id,'register',Setting()->get('coins_register'),Setting()->get('coins_register'))){ $message .= get_credit_message(Setting()->get('credits_register'),Setting()->get('coins_register')); } if(Setting()->get('register_type')=='email') { /*发送邮箱验证邮件*/ $emailToken = EmailToken::create([ 'email' => $user->email, 'token' => EmailToken::createToken(), 'action' => 'register' ]); if ($emailToken) { $subject = '欢迎注册' . Setting()->get('website_name') . ',请激活您注册的邮箱!'; $content = "「" . $request->user()->name . "」您好,请激活您在 " . Setting()->get('website_name') . " 的注册邮箱!
请在1小时内点击该链接激活注册账号 → " . route('auth.email.verifyToken', ['action' => $emailToken->action, 'token' => $emailToken->token]) . "
如非本人操作,请忽略此邮件!"; $this->sendEmail($emailToken->email, $subject, $content); } } return $this->success(route('website.index'),$message); } }