add google=auth

parent 27bbe3bc
...@@ -6,6 +6,7 @@ use App\Models\User; ...@@ -6,6 +6,7 @@ use App\Models\User;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use Laravel\Socialite\Facades\Socialite;
class UserController extends Controller class UserController extends Controller
{ {
...@@ -25,7 +26,6 @@ class UserController extends Controller ...@@ -25,7 +26,6 @@ class UserController extends Controller
//dd($request->all()); //dd($request->all());
session()->flash('success', 'Successful registration'); session()->flash('success', 'Successful registration');
$user = User::create([ $user = User::create([
'name' => $request->name, // || 'name' => $request->input('name'), 'name' => $request->name, // || 'name' => $request->input('name'),
'email' => $request->email, 'email' => $request->email,
...@@ -48,8 +48,6 @@ class UserController extends Controller ...@@ -48,8 +48,6 @@ class UserController extends Controller
'password' => 'required', 'password' => 'required',
]); ]);
//dd($request->all());
if (Auth::attempt([ if (Auth::attempt([
'email' => $request->email, 'email' => $request->email,
'password' => $request->password, 'password' => $request->password,
...@@ -65,17 +63,23 @@ class UserController extends Controller ...@@ -65,17 +63,23 @@ class UserController extends Controller
} }
public function settings() { public function settings() {
return view('user.settings');
if (Auth::check()) { }
return view('user.settings');
} else { public function loginGoogle() {
$message = 'Пользователь не авторизован!'; $googleUser = Socialite::driver('google')->user();
return view('errors.error', compact('message'));
$user = User::where('email','=', $googleUser->email)->first();
if (!$user) {
$user = User::create([
'name' => $googleUser->name,
'email' => $googleUser->email,
'password' => Hash::make(config('project.empty_password')),
]);
} }
Auth::login($user);
return redirect()->route('home');
} }
......
...@@ -12,6 +12,6 @@ class Authenticate extends Middleware ...@@ -12,6 +12,6 @@ class Authenticate extends Middleware
*/ */
protected function redirectTo(Request $request): ?string protected function redirectTo(Request $request): ?string
{ {
return $request->expectsJson() ? null : route('login'); return $request->expectsJson() ? null : route('login'); // перенаправление для не зарегистрированного
} }
} }
...@@ -21,7 +21,8 @@ class RedirectIfAuthenticated ...@@ -21,7 +21,8 @@ class RedirectIfAuthenticated
foreach ($guards as $guard) { foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) { if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME); //return redirect(RouteServiceProvider::HOME);
return redirect()->route('home'); // перенаправление для зарегистрированного
} }
} }
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
"guzzlehttp/guzzle": "^7.2", "guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10", "laravel/framework": "^10.10",
"laravel/sanctum": "^3.2", "laravel/sanctum": "^3.2",
"laravel/socialite": "^5.6",
"laravel/tinker": "^2.8" "laravel/tinker": "^2.8"
}, },
"require-dev": { "require-dev": {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "aa322c53454393ed775cfe4807d54a50", "content-hash": "a82cca88f00f5740ba7f164043bf06fc",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
...@@ -1300,6 +1300,76 @@ ...@@ -1300,6 +1300,76 @@
}, },
"time": "2023-01-30T18:31:20+00:00" "time": "2023-01-30T18:31:20+00:00"
}, },
{
"name": "laravel/socialite",
"version": "v5.6.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/socialite.git",
"reference": "00ea7f8630673ea49304fc8a9fca5a64eb838c7e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/socialite/zipball/00ea7f8630673ea49304fc8a9fca5a64eb838c7e",
"reference": "00ea7f8630673ea49304fc8a9fca5a64eb838c7e",
"shasum": ""
},
"require": {
"ext-json": "*",
"guzzlehttp/guzzle": "^6.0|^7.0",
"illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0",
"illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0",
"illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.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|^8.0",
"phpstan/phpstan": "^1.10",
"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": "2023-06-06T13:42:43+00:00"
},
{ {
"name": "laravel/tinker", "name": "laravel/tinker",
"version": "v2.8.1", "version": "v2.8.1",
...@@ -1760,6 +1830,82 @@ ...@@ -1760,6 +1830,82 @@
], ],
"time": "2022-04-17T13:12:02+00:00" "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": "monolog/monolog", "name": "monolog/monolog",
"version": "3.3.1", "version": "3.3.1",
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
return [ return [
'name' => 'Reblum', 'name' => 'Reblum',
'title' => 'Reblum - portrait retouch app', 'title' => 'Reblum - portrait retouch app',
'minificate_static' => true 'minificate_static' => true,
'empty_password' => '100',
]; ];
...@@ -30,5 +30,23 @@ return [ ...@@ -30,5 +30,23 @@ return [
'secret' => env('AWS_SECRET_ACCESS_KEY'), 'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), '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'),
],
'apple' => [
'client_id' => env('APPLE_CLIENT_ID'),
'client_secret' => env('APPLE_CLIENT_SECRET'),
'redirect' => env('APPLE_REDIRECT'),
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_REDIRECT'),
],
]; ];
...@@ -29,15 +29,16 @@ ...@@ -29,15 +29,16 @@
<header id="header" class="fixed-top"> <header id="header" class="fixed-top">
<div class="container d-flex align-items-center justify-content-between"> <div class="container d-flex align-items-center justify-content-between">
<h1 class="logo"><a href="{{ route('home') }}">{{ config('project.name') }}</a></h1> <h1 class="logo"><a href="{{ route('home') }}">{{ config('project.name') }}</a></h1>
@auth @auth
<a class="" href="{{ url('settings') }}">Налаштування</a> <a class="" href="{{ url('settings') }}">Налаштування</a>
<a class="" href="{{ route('logout') }}">Вийти</a> <a class="" href="{{ route('logout') }}">Вийти</a>
@else @endauth
@guest
<a class="" href="{{ route('login.create') }}">Вхiд</a> <a class="" href="{{ route('login.create') }}">Вхiд</a>
<a class="" href="{{ route('register.create') }}">Регiстрацiя</a> <a class="" href="{{ route('register.create') }}">Регiстрацiя</a>
@endauth @endguest
@yield('head_content') @yield('head_content')
</div> </div>
......
...@@ -33,8 +33,9 @@ ...@@ -33,8 +33,9 @@
<input class="form-control" type="password" id="password_confirmation" name="password_confirmation"> <input class="form-control" type="password" id="password_confirmation" name="password_confirmation">
</div> </div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Send</button> <button type="submit" class="btn btn-primary">Send</button>
</div>
</form> </form>
......
...@@ -22,8 +22,13 @@ ...@@ -22,8 +22,13 @@
<label for='password'>Password</label> <label for='password'>Password</label>
<input class="form-control" type="password" id="password" name="password"> <input class="form-control" type="password" id="password" name="password">
</div> </div>
<button type="submit" class="btn btn-primary">Войти</button> <div class="form-group">
<button type="submit" class="btn btn-primary">Войти</button>
</div>
<a class="" href="{{ route('login.google') }}">Войти через Google</a><br>
<a class="" href="{{ route('login.facebook') }}">Войти через Facebook</a><br>
</form> </form>
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use Laravel\Socialite\Facades\Socialite;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
...@@ -19,13 +20,52 @@ Route::get('/', function () { ...@@ -19,13 +20,52 @@ Route::get('/', function () {
return view('home'); return view('home');
}) -> name('home'); }) -> name('home');
Route::get('/register', [UserController::class, 'create']) -> name('register.create');
Route::post('/register', [UserController::class, 'store']) -> name('register.store');
Route::get('/login', [UserController::class, 'loginForm']) -> name('login.create'); Route::group(['middleware' => 'guest'], function(){
Route::post('/login', [UserController::class, 'login']) -> name('login');
Route::get('/logout', [UserController::class, 'logout']) -> name('logout'); Route::get('/register', [UserController::class, 'create']) -> name('register.create');
Route::post('/register', [UserController::class, 'store']) -> name('register.store');
Route::get('/login', [UserController::class, 'loginForm']) -> name('login.create');
Route::post('/login', [UserController::class, 'login']) -> name('login');
});
Route::group(['middleware' => 'auth'], function(){
Route::get('/logout', [UserController::class, 'logout']) -> name('logout');
Route::get('/settings', [UserController::class, 'settings']) -> name('settings');
});
//Auth Google
Route::get('/login/google', function () {
return Socialite::driver('google')->redirect();
}) -> name('login.google');
Route::get('/login/google/callback', [UserController::class, 'loginGoogle']) -> name('register.store');
//Auth Facebook
Route::get('login/facebook', function () {
return Socialite::driver('facebook')->redirect();
}) -> name('login.facebook');
Route::get('login/facebook/callback', function () {
$user = Socialite::driver('facebook')->user();
// $user->token
});
Route::get('/settings', [UserController::class, 'settings']) -> name('settings');
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment