Showing
3 changed files
with
22 additions
and
116 deletions
| ... | @@ -8,6 +8,7 @@ use App\Models\User; | ... | @@ -8,6 +8,7 @@ use App\Models\User; |
| 8 | use App\Models\UserProfile; | 8 | use App\Models\UserProfile; |
| 9 | use Illuminate\Http\Request; | 9 | use Illuminate\Http\Request; |
| 10 | use Illuminate\Support\Facades\Auth; | 10 | use Illuminate\Support\Facades\Auth; |
| 11 | +use Illuminate\Support\Facades\Validator; | ||
| 11 | use Jiannei\Response\Laravel\Support\Facades\Response; | 12 | use Jiannei\Response\Laravel\Support\Facades\Response; |
| 12 | use Laravel\Socialite\Facades\Socialite; | 13 | use Laravel\Socialite\Facades\Socialite; |
| 13 | 14 | ||
| ... | @@ -24,125 +25,36 @@ class AuthController extends Controller | ... | @@ -24,125 +25,36 @@ class AuthController extends Controller |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | /** | 27 | /** |
| 27 | - * web用户客户端授权后直接到这里 | 28 | + * 社会化用户登录 |
| 28 | - * @param Request $request | ||
| 29 | - * @param $service | ||
| 30 | - */ | ||
| 31 | - public function handleProviderCallback(Request $request, $service) | ||
| 32 | - { | ||
| 33 | - $socialUser = Socialite::driver($service)->user(); | ||
| 34 | - dd($socialUser); | ||
| 35 | -// //据说apple有问题需要用这种办法 | ||
| 36 | -// if ($service === 'apple'){ | ||
| 37 | -// // apple 登录 | ||
| 38 | -// try { | ||
| 39 | -// if ($code = $request->code) { | ||
| 40 | -// $response = http('https://appleid.apple.com/auth/token', [ | ||
| 41 | -// 'grant_type' => 'authorization_code', | ||
| 42 | -// 'code' => $code, | ||
| 43 | -// 'redirect_uri' => config('services.apple.redirect') , | ||
| 44 | -// 'client_id' => config('services.apple.client_id') , | ||
| 45 | -// 'client_secret' => config('services.apple.client_secret') , | ||
| 46 | -// ]); | ||
| 47 | -// $id_token = $response->id_token; | ||
| 48 | -// } else { | ||
| 49 | -// $id_token = $request->access_token; | ||
| 50 | -// } | ||
| 51 | -// $oauthUser = json_decode(base64_decode(explode('.', $id_token) [1])); | ||
| 52 | -// } | ||
| 53 | -// catch(\Exception $e) { | ||
| 54 | -// return $this->failed('apple 参数错误'); | ||
| 55 | -// } | ||
| 56 | -// } | ||
| 57 | -// function http($url, $params = false) | ||
| 58 | -// { | ||
| 59 | -// $ch = curl_init($url); | ||
| 60 | -// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
| 61 | -// if ($params) { | ||
| 62 | -// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); | ||
| 63 | -// } curl_setopt($ch, CURLOPT_HTTPHEADER, [ | ||
| 64 | -// 'Accept: application/json', | ||
| 65 | -// 'User-Agent: curl', # Apple requires a user agent header at the token endpoint | ||
| 66 | -// ]); | ||
| 67 | -// $response = curl_exec($ch); | ||
| 68 | -// return json_decode($response); | ||
| 69 | -// } | ||
| 70 | - } | ||
| 71 | - | ||
| 72 | - | ||
| 73 | - | ||
| 74 | - /** | ||
| 75 | - * 移动端微信用户 | ||
| 76 | * @param Request $request | 29 | * @param Request $request |
| 77 | * @param $service | 30 | * @param $service |
| 78 | * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource | 31 | * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource |
| 79 | */ | 32 | */ |
| 80 | public function apiHandleProviderCallback(Request $request, $service) | 33 | public function apiHandleProviderCallback(Request $request, $service) |
| 81 | { | 34 | { |
| 82 | - $code = $request->get('code'); | 35 | + $validator = Validator::make(['code' => $request->code, 'provider' => $service], [ |
| 36 | + 'code' => 'required', | ||
| 37 | + 'provider' => 'required|in:facebook,twitter,github,apple' | ||
| 38 | + ]); | ||
| 83 | 39 | ||
| 84 | - if (!$code) return Response::fail('code miss'); | 40 | + if ($validator->fails()){ |
| 41 | + return Response::fail('',500,$validator->errors()); | ||
| 42 | + } | ||
| 85 | 43 | ||
| 86 | $socialUser = Socialite::driver($service)->stateless()->user(); | 44 | $socialUser = Socialite::driver($service)->stateless()->user(); |
| 87 | 45 | ||
| 88 | $user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first(); | 46 | $user = User::query()->where('provider', $service)->where('provider_id', $socialUser->id)->first(); |
| 89 | 47 | ||
| 90 | -// if ($user == null){ | ||
| 91 | -// | ||
| 92 | -// // 如果该用户不存在则将其保存到 users 表 | ||
| 93 | -// $newUser = new User(); | ||
| 94 | -// | ||
| 95 | -// $newUser->name = $socialUser->getName(); | ||
| 96 | -// $newUser->email = $socialUser->getEmail() == '' ? '' : $socialUser->getEmail(); | ||
| 97 | -// $newUser->avatar = $socialUser->getAvatar(); | ||
| 98 | -// $newUser->password = ''; | ||
| 99 | -// $newUser->provider = $account; | ||
| 100 | -// $newUser->provider_id = $socialUser->getId(); | ||
| 101 | -// | ||
| 102 | -// $newUser->save(); | ||
| 103 | -// $user = $newUser; | ||
| 104 | -// } | ||
| 105 | -// | ||
| 106 | -// | ||
| 107 | -// Auth::login(); | ||
| 108 | - | ||
| 109 | - | ||
| 110 | - | ||
| 111 | - | ||
| 112 | - | ||
| 113 | - | ||
| 114 | - | ||
| 115 | - return Response::success($socialUser); | ||
| 116 | - | ||
| 117 | - | ||
| 118 | -// //另一种写法 | ||
| 119 | -// $user = User::query()->firstOrCreate([ | ||
| 120 | -// 'provider_id' => $oauthUser->id, | ||
| 121 | -// 'provider' => $service, | ||
| 122 | -// ],[ | ||
| 123 | -// 'nickname' => $oauthUser->nickname, | ||
| 124 | -// 'avatar' => $oauthUser->avatar, | ||
| 125 | -// 'provider' => $service, | ||
| 126 | -// 'provider_id' => $oauthUser->id, | ||
| 127 | -// ]); | ||
| 128 | -// | ||
| 129 | -// UserProfile::query()->firstOrCreate([ | ||
| 130 | -// 'user_id' => $user->id, | ||
| 131 | -// 'unionid' => $oauthUser->unionid, | ||
| 132 | -// ]); | ||
| 133 | - | ||
| 134 | - $user = User::query()->where( 'provider_id', '=', $oauthUser->id ) | ||
| 135 | - ->where( 'provider', '=', $service ) | ||
| 136 | - ->first(); | ||
| 137 | - | ||
| 138 | if ($user == null){ | 48 | if ($user == null){ |
| 139 | // 如果该用户不存在则将其保存到 users 表 | 49 | // 如果该用户不存在则将其保存到 users 表 |
| 140 | $newUser = new User(); | 50 | $newUser = new User(); |
| 141 | 51 | ||
| 142 | - $newUser->nickname = $oauthUser->nickname; | 52 | + $newUser->nickname = $socialUser->nickname ?? $socialUser->name; |
| 143 | - $newUser->avatar = $oauthUser->avatar; | 53 | + $newUser->email = $socialUser->email ?? ''; |
| 54 | + $newUser->avatar = $socialUser->avatar ?? ''; | ||
| 55 | + $newUser->password = ''; | ||
| 144 | $newUser->provider = $service; | 56 | $newUser->provider = $service; |
| 145 | - $newUser->provider_id = $oauthUser->id; | 57 | + $newUser->provider_id = $socialUser->id; |
| 146 | 58 | ||
| 147 | $newUser->save(); | 59 | $newUser->save(); |
| 148 | $user = $newUser; | 60 | $user = $newUser; |
| ... | @@ -150,19 +62,14 @@ class AuthController extends Controller | ... | @@ -150,19 +62,14 @@ class AuthController extends Controller |
| 150 | // user_profile 保存 | 62 | // user_profile 保存 |
| 151 | $userProfile = new UserProfile(); | 63 | $userProfile = new UserProfile(); |
| 152 | $userProfile->user_id = $user->id; | 64 | $userProfile->user_id = $user->id; |
| 153 | - $userProfile->unionid = $oauthUser->unionid; | 65 | + $userProfile->unionid = $socialUser->unionid ?? ''; |
| 154 | $userProfile->save(); | 66 | $userProfile->save(); |
| 155 | } | 67 | } |
| 156 | 68 | ||
| 157 | - Auth::guard('api')->login($user); | 69 | + $token = $user->createToken($user->id)->plainTextToken; |
| 158 | 70 | ||
| 159 | - return Response::success([ | 71 | + $response = ['token' => $token]; |
| 160 | - 'user_id' => $user->id, | 72 | + |
| 161 | - 'nickname' => $user->nickname, | 73 | + return Response::success($response); |
| 162 | - 'mobile' => $user->mobile, | ||
| 163 | - 'gender' => $user->gender, | ||
| 164 | - 'avatar' => $user->avatar, | ||
| 165 | - 'token' => $user->createToken($user->id)->plainTextToken | ||
| 166 | - ]); | ||
| 167 | } | 74 | } |
| 168 | } | 75 | } | ... | ... |
| ... | @@ -12,7 +12,7 @@ class UserProfile extends Model | ... | @@ -12,7 +12,7 @@ class UserProfile extends Model |
| 12 | 12 | ||
| 13 | protected $table = 'user_profiles'; | 13 | protected $table = 'user_profiles'; |
| 14 | 14 | ||
| 15 | - protected $fillable = ['user_id']; | 15 | + protected $fillable = ['user_id','unionid']; |
| 16 | 16 | ||
| 17 | public function user() | 17 | public function user() |
| 18 | { | 18 | { | ... | ... |
| ... | @@ -19,13 +19,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route | ... | @@ -19,13 +19,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route |
| 19 | $api->post('/login', 'UserController@login'); | 19 | $api->post('/login', 'UserController@login'); |
| 20 | $api->post('/register', 'UserController@register'); | 20 | $api->post('/register', 'UserController@register'); |
| 21 | $api->get('/verify', 'UserController@verify'); | 21 | $api->get('/verify', 'UserController@verify'); |
| 22 | -}); | ||
| 23 | 22 | ||
| 24 | -Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api){ | 23 | + /** 社会化用户登录*/ |
| 25 | - /** 移动端微信用户登录*/ | ||
| 26 | $api->get('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); | 24 | $api->get('auth/{service}/callback', 'AuthController@apiHandleProviderCallback'); |
| 27 | }); | 25 | }); |
| 28 | 26 | ||
| 27 | + | ||
| 29 | //Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanctum')->group(function ($api){ | 28 | //Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanctum')->group(function ($api){ |
| 30 | Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api) { | 29 | Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Router $api) { |
| 31 | 30 | ... | ... |
-
Please register or login to post a comment