add google=auth

parent 27bbe3bc
......@@ -6,6 +6,7 @@ use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Laravel\Socialite\Facades\Socialite;
class UserController extends Controller
{
......@@ -25,7 +26,6 @@ class UserController extends Controller
//dd($request->all());
session()->flash('success', 'Successful registration');
$user = User::create([
'name' => $request->name, // || 'name' => $request->input('name'),
'email' => $request->email,
......@@ -48,8 +48,6 @@ class UserController extends Controller
'password' => 'required',
]);
//dd($request->all());
if (Auth::attempt([
'email' => $request->email,
'password' => $request->password,
......@@ -65,17 +63,23 @@ class UserController extends Controller
}
public function settings() {
if (Auth::check()) {
return view('user.settings');
} else {
$message = 'Пользователь не авторизован!';
return view('errors.error', compact('message'));
return view('user.settings');
}
public function loginGoogle() {
$googleUser = Socialite::driver('google')->user();
$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
*/
protected function redirectTo(Request $request): ?string
{
return $request->expectsJson() ? null : route('login');
return $request->expectsJson() ? null : route('login'); // перенаправление для не зарегистрированного
}
}
......@@ -21,7 +21,8 @@ class RedirectIfAuthenticated
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
//return redirect(RouteServiceProvider::HOME);
return redirect()->route('home'); // перенаправление для зарегистрированного
}
}
......
......@@ -9,6 +9,7 @@
"guzzlehttp/guzzle": "^7.2",
"laravel/framework": "^10.10",
"laravel/sanctum": "^3.2",
"laravel/socialite": "^5.6",
"laravel/tinker": "^2.8"
},
"require-dev": {
......
......@@ -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": "aa322c53454393ed775cfe4807d54a50",
"content-hash": "a82cca88f00f5740ba7f164043bf06fc",
"packages": [
{
"name": "brick/math",
......@@ -1300,6 +1300,76 @@
},
"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",
"version": "v2.8.1",
......@@ -1760,6 +1830,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": "monolog/monolog",
"version": "3.3.1",
......
......@@ -3,6 +3,7 @@
return [
'name' => 'Reblum',
'title' => 'Reblum - portrait retouch app',
'minificate_static' => true
'minificate_static' => true,
'empty_password' => '100',
];
......@@ -30,5 +30,23 @@ return [
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'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 @@
<header id="header" class="fixed-top">
<div class="container d-flex align-items-center justify-content-between">
<h1 class="logo"><a href="{{ route('home') }}">{{ config('project.name') }}</a></h1>
@auth
<a class="" href="{{ url('settings') }}">Налаштування</a>
<a class="" href="{{ route('logout') }}">Вийти</a>
@else
@endauth
@guest
<a class="" href="{{ route('login.create') }}">Вхiд</a>
<a class="" href="{{ route('register.create') }}">Регiстрацiя</a>
@endauth
@endguest
@yield('head_content')
</div>
......
......@@ -33,8 +33,9 @@
<input class="form-control" type="password" id="password_confirmation" name="password_confirmation">
</div>
<button type="submit" class="btn btn-primary">Send</button>
<div class="form-group">
<button type="submit" class="btn btn-primary">Send</button>
</div>
</form>
......
......@@ -22,8 +22,13 @@
<label for='password'>Password</label>
<input class="form-control" type="password" id="password" name="password">
</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>
......
......@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Route;
use Laravel\Socialite\Facades\Socialite;
/*
|--------------------------------------------------------------------------
......@@ -19,13 +20,52 @@ Route::get('/', function () {
return view('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::post('/login', [UserController::class, 'login']) -> name('login');
Route::get('/logout', [UserController::class, 'logout']) -> name('logout');
Route::group(['middleware' => 'guest'], function(){
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