Toggle navigation
Toggle navigation
This project
Loading...
Sign in
OnePoem
/
OnePoem-Server
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
李帅
2022-03-29 23:20:20 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
48f8dd7e9f2da3d16ad415d707d5cb7da304d2c0
48f8dd7e
1 parent
adde58f4
社会化登录完成
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
22 additions
and
116 deletions
app/Http/Controllers/V1/AuthController.php
app/Models/UserProfile.php
routes/api.php
app/Http/Controllers/V1/AuthController.php
View file @
48f8dd7
...
...
@@ -8,6 +8,7 @@ use App\Models\User;
use
App\Models\UserProfile
;
use
Illuminate\Http\Request
;
use
Illuminate\Support\Facades\Auth
;
use
Illuminate\Support\Facades\Validator
;
use
Jiannei\Response\Laravel\Support\Facades\Response
;
use
Laravel\Socialite\Facades\Socialite
;
...
...
@@ -24,125 +25,36 @@ class AuthController extends Controller
}
/**
* web用户客户端授权后直接到这里
* @param Request $request
* @param $service
*/
public
function
handleProviderCallback
(
Request
$request
,
$service
)
{
$socialUser
=
Socialite
::
driver
(
$service
)
->
user
();
dd
(
$socialUser
);
// //据说apple有问题需要用这种办法
// if ($service === 'apple'){
// // apple 登录
// try {
// if ($code = $request->code) {
// $response = http('https://appleid.apple.com/auth/token', [
// 'grant_type' => 'authorization_code',
// 'code' => $code,
// 'redirect_uri' => config('services.apple.redirect') ,
// 'client_id' => config('services.apple.client_id') ,
// 'client_secret' => config('services.apple.client_secret') ,
// ]);
// $id_token = $response->id_token;
// } else {
// $id_token = $request->access_token;
// }
// $oauthUser = json_decode(base64_decode(explode('.', $id_token) [1]));
// }
// catch(\Exception $e) {
// return $this->failed('apple 参数错误');
// }
// }
// function http($url, $params = false)
// {
// $ch = curl_init($url);
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// if ($params) {
// curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
// } curl_setopt($ch, CURLOPT_HTTPHEADER, [
// 'Accept: application/json',
// 'User-Agent: curl', # Apple requires a user agent header at the token endpoint
// ]);
// $response = curl_exec($ch);
// return json_decode($response);
// }
}
/**
* 移动端微信用户
* 社会化用户登录
* @param Request $request
* @param $service
* @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
*/
public
function
apiHandleProviderCallback
(
Request
$request
,
$service
)
{
$code
=
$request
->
get
(
'code'
);
$validator
=
Validator
::
make
([
'code'
=>
$request
->
code
,
'provider'
=>
$service
],
[
'code'
=>
'required'
,
'provider'
=>
'required|in:facebook,twitter,github,apple'
]);
if
(
!
$code
)
return
Response
::
fail
(
'code miss'
);
if
(
$validator
->
fails
()){
return
Response
::
fail
(
''
,
500
,
$validator
->
errors
());
}
$socialUser
=
Socialite
::
driver
(
$service
)
->
stateless
()
->
user
();
$user
=
User
::
query
()
->
where
(
'provider'
,
$service
)
->
where
(
'provider_id'
,
$socialUser
->
id
)
->
first
();
// if ($user == null){
//
// // 如果该用户不存在则将其保存到 users 表
// $newUser = new User();
//
// $newUser->name = $socialUser->getName();
// $newUser->email = $socialUser->getEmail() == '' ? '' : $socialUser->getEmail();
// $newUser->avatar = $socialUser->getAvatar();
// $newUser->password = '';
// $newUser->provider = $account;
// $newUser->provider_id = $socialUser->getId();
//
// $newUser->save();
// $user = $newUser;
// }
//
//
// Auth::login();
return
Response
::
success
(
$socialUser
);
// //另一种写法
// $user = User::query()->firstOrCreate([
// 'provider_id' => $oauthUser->id,
// 'provider' => $service,
// ],[
// 'nickname' => $oauthUser->nickname,
// 'avatar' => $oauthUser->avatar,
// 'provider' => $service,
// 'provider_id' => $oauthUser->id,
// ]);
//
// UserProfile::query()->firstOrCreate([
// 'user_id' => $user->id,
// 'unionid' => $oauthUser->unionid,
// ]);
$user
=
User
::
query
()
->
where
(
'provider_id'
,
'='
,
$oauthUser
->
id
)
->
where
(
'provider'
,
'='
,
$service
)
->
first
();
if
(
$user
==
null
){
// 如果该用户不存在则将其保存到 users 表
$newUser
=
new
User
();
$newUser
->
nickname
=
$oauthUser
->
nickname
;
$newUser
->
avatar
=
$oauthUser
->
avatar
;
$newUser
->
nickname
=
$socialUser
->
nickname
??
$socialUser
->
name
;
$newUser
->
email
=
$socialUser
->
email
??
''
;
$newUser
->
avatar
=
$socialUser
->
avatar
??
''
;
$newUser
->
password
=
''
;
$newUser
->
provider
=
$service
;
$newUser
->
provider_id
=
$
oauth
User
->
id
;
$newUser
->
provider_id
=
$
social
User
->
id
;
$newUser
->
save
();
$user
=
$newUser
;
...
...
@@ -150,19 +62,14 @@ class AuthController extends Controller
// user_profile 保存
$userProfile
=
new
UserProfile
();
$userProfile
->
user_id
=
$user
->
id
;
$userProfile
->
unionid
=
$
oauthUser
->
unionid
;
$userProfile
->
unionid
=
$
socialUser
->
unionid
??
''
;
$userProfile
->
save
();
}
Auth
::
guard
(
'api'
)
->
login
(
$user
)
;
$token
=
$user
->
createToken
(
$user
->
id
)
->
plainTextToken
;
return
Response
::
success
([
'user_id'
=>
$user
->
id
,
'nickname'
=>
$user
->
nickname
,
'mobile'
=>
$user
->
mobile
,
'gender'
=>
$user
->
gender
,
'avatar'
=>
$user
->
avatar
,
'token'
=>
$user
->
createToken
(
$user
->
id
)
->
plainTextToken
]);
$response
=
[
'token'
=>
$token
];
return
Response
::
success
(
$response
);
}
}
...
...
app/Models/UserProfile.php
View file @
48f8dd7
...
...
@@ -12,7 +12,7 @@ class UserProfile extends Model
protected
$table
=
'user_profiles'
;
protected
$fillable
=
[
'user_id'
];
protected
$fillable
=
[
'user_id'
,
'unionid'
];
public
function
user
()
{
...
...
routes/api.php
View file @
48f8dd7
...
...
@@ -19,13 +19,12 @@ Route::prefix('v1')->namespace('App\Http\Controllers\V1')->group(function (Route
$api
->
post
(
'/login'
,
'UserController@login'
);
$api
->
post
(
'/register'
,
'UserController@register'
);
$api
->
get
(
'/verify'
,
'UserController@verify'
);
});
Route
::
prefix
(
'v1'
)
->
namespace
(
'App\Http\Controllers\V1'
)
->
group
(
function
(
Router
$api
){
/** 移动端微信用户登录*/
/** 社会化用户登录*/
$api
->
get
(
'auth/{service}/callback'
,
'AuthController@apiHandleProviderCallback'
);
});
//Route::prefix('v1')->namespace('App\Http\Controllers\V1')->middleware('auth:sanctum')->group(function ($api){
Route
::
prefix
(
'v1'
)
->
namespace
(
'App\Http\Controllers\V1'
)
->
group
(
function
(
Router
$api
)
{
...
...
Please
register
or
login
to post a comment