api social login
This commit is contained in:
@@ -3,10 +3,12 @@
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use Modules\Linksehat\Transformers\UserProfileResource;
|
||||
use Validator;
|
||||
|
||||
@@ -18,8 +20,8 @@ class AuthController extends Controller
|
||||
// 'phone' => 'required'
|
||||
'phone_or_email' => 'required'
|
||||
]);
|
||||
|
||||
if(filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
|
||||
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
$user = User::updateOrCreate([
|
||||
'email' => $request->phone_or_email
|
||||
], [
|
||||
@@ -27,8 +29,7 @@ class AuthController extends Controller
|
||||
'otp' => rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
$user = User::updateOrCreate([
|
||||
'phone' => $request->phone_or_email
|
||||
], [
|
||||
@@ -40,9 +41,9 @@ class AuthController extends Controller
|
||||
|
||||
if (!$user) {
|
||||
return response()->json([
|
||||
'message' => filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ?
|
||||
"User dengan alamat email ".$request->phone_or_email." tidak ditemukan" :
|
||||
"User dengan nomor telepon ".$request->phone_or_email." tidak ditemukan"
|
||||
'message' => filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ?
|
||||
"User dengan alamat email " . $request->phone_or_email . " tidak ditemukan" :
|
||||
"User dengan nomor telepon " . $request->phone_or_email . " tidak ditemukan"
|
||||
], 404);
|
||||
}
|
||||
|
||||
@@ -60,7 +61,7 @@ class AuthController extends Controller
|
||||
]
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
@@ -76,14 +77,14 @@ class AuthController extends Controller
|
||||
|
||||
if ($loginType == 'email') {
|
||||
$user = User::query()
|
||||
->where('email', $request->phone_or_email)
|
||||
->first();
|
||||
->where('email', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if ($loginType == 'phone') {
|
||||
$user = User::query()
|
||||
->where('phone', $request->phone_or_email)
|
||||
->first();
|
||||
->where('phone', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if (!isset($user) || empty($user)) {
|
||||
@@ -115,7 +116,7 @@ class AuthController extends Controller
|
||||
'email' => 'required|email|unique:users,email',
|
||||
'password' => [
|
||||
'required',
|
||||
'confirmed',
|
||||
'confirmed',
|
||||
'min:8',
|
||||
'regex:/.*[0-9].*/',
|
||||
'regex:/.*[a-z].*/',
|
||||
@@ -155,7 +156,7 @@ class AuthController extends Controller
|
||||
$request->validate([
|
||||
'phone_or_email' => 'required'
|
||||
]);
|
||||
|
||||
|
||||
$user = User::where((filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone'), $request->phone_or_email)->first();
|
||||
|
||||
if ($user) {
|
||||
@@ -173,6 +174,44 @@ class AuthController extends Controller
|
||||
'message' => 'User Tidak Ditemukan'
|
||||
], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function redirectSocialLogin($provider)
|
||||
{
|
||||
return Socialite::driver($provider)->redirect();
|
||||
}
|
||||
|
||||
public function handleSocialLoginCallback(Request $request, $provider)
|
||||
{
|
||||
// get the provider's user. (In the provider server)
|
||||
$providerUser = Socialite::driver($provider)->user();
|
||||
|
||||
// check if access token exists etc..
|
||||
// search for a user in our server with the specified provider id and provider name
|
||||
$user = User::where('email', $providerUser->email)->first();
|
||||
|
||||
// // if there is no record with these data, create a new user
|
||||
if (!$user) {
|
||||
$user = User::query()->create([
|
||||
'email' => $providerUser->email,
|
||||
]);
|
||||
|
||||
$person = Person::query()->create([
|
||||
'owner_user_id' => $user->id,
|
||||
'name' => $providerUser->name,
|
||||
'email' => $providerUser->email,
|
||||
]);
|
||||
|
||||
User::query()->find($user->id)->update([
|
||||
'person_id' => $person->id
|
||||
]);
|
||||
}
|
||||
|
||||
// // return the token for usage
|
||||
return response([
|
||||
'message' => 'Selamat Datang',
|
||||
'user' => UserProfileResource::make($user),
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,6 +26,8 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::post('mock-otp', [AuthController::class, 'mockOtp']);
|
||||
Route::post('login', [AuthController::class, 'login']);
|
||||
Route::post('register', [AuthController::class, 'register']);
|
||||
Route::get('social-login/{provider}', [AuthController::class, 'redirectSocialLogin']);
|
||||
Route::get('social-login/{provider}/callback', [AuthController::class, 'handleSocialLoginCallback']);
|
||||
|
||||
// Route::get('articles', [ArticleController::class, 'index']);
|
||||
// Route::get('articles/id', [ArticleController::class, 'show']);
|
||||
|
||||
@@ -21,6 +21,7 @@ class Kernel extends HttpKernel
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
"guzzlehttp/guzzle": "^7.2",
|
||||
"laravel/framework": "^9.11",
|
||||
"laravel/sanctum": "^2.15",
|
||||
"laravel/socialite": "^5.5",
|
||||
"laravel/tinker": "^2.7",
|
||||
"maatwebsite/excel": "^3.1",
|
||||
"nwidart/laravel-modules": "^9.0",
|
||||
|
||||
149
composer.lock
generated
149
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "b90f9f090c04c5bbe673dadc0237e57d",
|
||||
"content-hash": "d08dff996a3db932c1ac6127c81d2c82",
|
||||
"packages": [
|
||||
{
|
||||
"name": "box/spout",
|
||||
@@ -1322,6 +1322,75 @@
|
||||
},
|
||||
"time": "2022-02-11T19:23:53+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/socialite",
|
||||
"version": "v5.5.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/laravel/socialite.git",
|
||||
"reference": "ce8b2f967eead5a6bae74449e207be6f8046edc3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/laravel/socialite/zipball/ce8b2f967eead5a6bae74449e207be6f8046edc3",
|
||||
"reference": "ce8b2f967eead5a6bae74449e207be6f8046edc3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0",
|
||||
"illuminate/http": "^6.0|^7.0|^8.0|^9.0",
|
||||
"illuminate/support": "^6.0|^7.0|^8.0|^9.0",
|
||||
"league/oauth1-client": "^1.10.1",
|
||||
"php": "^7.2|^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "^1.0",
|
||||
"orchestra/testbench": "^4.0|^5.0|^6.0|^7.0",
|
||||
"phpunit/phpunit": "^8.0|^9.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "5.x-dev"
|
||||
},
|
||||
"laravel": {
|
||||
"providers": [
|
||||
"Laravel\\Socialite\\SocialiteServiceProvider"
|
||||
],
|
||||
"aliases": {
|
||||
"Socialite": "Laravel\\Socialite\\Facades\\Socialite"
|
||||
}
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Laravel\\Socialite\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Taylor Otwell",
|
||||
"email": "taylor@laravel.com"
|
||||
}
|
||||
],
|
||||
"description": "Laravel wrapper around OAuth 1 & OAuth 2 libraries.",
|
||||
"homepage": "https://laravel.com",
|
||||
"keywords": [
|
||||
"laravel",
|
||||
"oauth"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/laravel/socialite/issues",
|
||||
"source": "https://github.com/laravel/socialite"
|
||||
},
|
||||
"time": "2022-08-20T21:32:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel/tinker",
|
||||
"version": "v2.7.2",
|
||||
@@ -1724,6 +1793,82 @@
|
||||
],
|
||||
"time": "2022-04-17T13:12:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "league/oauth1-client",
|
||||
"version": "v1.10.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/thephpleague/oauth1-client.git",
|
||||
"reference": "d6365b901b5c287dd41f143033315e2f777e1167"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/thephpleague/oauth1-client/zipball/d6365b901b5c287dd41f143033315e2f777e1167",
|
||||
"reference": "d6365b901b5c287dd41f143033315e2f777e1167",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*",
|
||||
"ext-openssl": "*",
|
||||
"guzzlehttp/guzzle": "^6.0|^7.0",
|
||||
"guzzlehttp/psr7": "^1.7|^2.0",
|
||||
"php": ">=7.1||>=8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-simplexml": "*",
|
||||
"friendsofphp/php-cs-fixer": "^2.17",
|
||||
"mockery/mockery": "^1.3.3",
|
||||
"phpstan/phpstan": "^0.12.42",
|
||||
"phpunit/phpunit": "^7.5||9.5"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-simplexml": "For decoding XML-based responses."
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.0-dev",
|
||||
"dev-develop": "2.0-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"League\\OAuth1\\Client\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Ben Corlett",
|
||||
"email": "bencorlett@me.com",
|
||||
"homepage": "http://www.webcomm.com.au",
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"description": "OAuth 1.0 Client Library",
|
||||
"keywords": [
|
||||
"Authentication",
|
||||
"SSO",
|
||||
"authorization",
|
||||
"bitbucket",
|
||||
"identity",
|
||||
"idp",
|
||||
"oauth",
|
||||
"oauth1",
|
||||
"single sign on",
|
||||
"trello",
|
||||
"tumblr",
|
||||
"twitter"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/thephpleague/oauth1-client/issues",
|
||||
"source": "https://github.com/thephpleague/oauth1-client/tree/v1.10.1"
|
||||
},
|
||||
"time": "2022-04-15T14:02:14+00:00"
|
||||
},
|
||||
{
|
||||
"name": "maatwebsite/excel",
|
||||
"version": "3.1.40",
|
||||
@@ -9126,5 +9271,5 @@
|
||||
"php": "^8.0.2"
|
||||
},
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.1.0"
|
||||
"plugin-api-version": "2.3.0"
|
||||
}
|
||||
|
||||
@@ -31,4 +31,10 @@ return [
|
||||
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
|
||||
],
|
||||
|
||||
'google' => [
|
||||
'client_id' => env('GOOGLE_CLIENT_ID'),
|
||||
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
|
||||
'redirect' => env('GOOGLE_REDIRECT_URI'),
|
||||
],
|
||||
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user