Untitled

 avatar
unknown
plain_text
9 months ago
4.3 kB
3
Indexable
<?php

namespace App\Http\Controllers;

use App\Models\User;
use App\Models\UserActivation;
use App\Providers\SadayanaProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Laravel\Socialite\Facades\Socialite;

class AuthController extends Controller
{
    /**
     * Show layout login
     *
     * @return \Illuminate\Http\Response
     */
    function login() {
        return view('auth.login.index');
    }

    /**
     * Melakukan input data login
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  Request  $req
     * @return \Illuminate\Http\Response
     */
    function authenticate(Request $request) {
        $credentials = $request->validate([
            'email' => ['required'],
            'password' => ['required']
        ]);

        try {
            if (Auth::attempt($credentials)) {
                $user = User::where('email', $request->email)->first();

                if ($user->is_active === 0) {
                    Auth::logout();
                    $request->session()->invalidate();

                    return redirect()->route('user.activation', ['username' => $user->username]);
                }

                session([
                    'name' => $user->name,
                    'username' => $user->username
                ]);
                $request->session()->regenerate();
                return redirect()->intended('/');
            } else {
                return back()->withErrors([
                    'login' => 'Data yang Anda masukkan salah. Apabila sebelumnya Anda masuk menggunakan SSO Bandung Sadayana, silahkan masuk melalui Bandung Sadayana',
                ])->onlyInput('email');
            }
        } catch (\Throwable $th) {
            return back()->withErrors([
                'login' => 'Apabila sebelumnya Anda masuk menggunakan SSO Bandung Sadayana, silahkan masuk melalui Bandung Sadayana',
            ])->onlyInput('email');
        }
    }

    /**
     * Redirect sadayana
     * @return \Symfony\Component\HttpFoundation\RedirectResponse
     */
    public function redirect($provider)
    {
        // 'bandung-sso'
        return Socialite::driver($provider)->redirect();
    }

    /**
     * Callback sadayana
     * @return \Illuminate\Http\RedirectResponse
     */
    public function callback($provider)
    {
        try {
            $sadayana = Socialite::driver($provider)->stateless()->user();
            $userFromSadayana = $sadayana->user;
            $user = User::where('bandung_sso_id', $userFromSadayana['id'])->first();

            if (!$user) {
                $user = User::create([
                    'bandung_sso_id' => $userFromSadayana['id'],
                    'name' => $userFromSadayana['nickname'],
                    'username' => $userFromSadayana['username'],
                    'email' => $userFromSadayana['email'],
                    'phone_number' => $userFromSadayana['basic']['phone'],
                    'photo_profile' => $userFromSadayana['basic']['picture'],
                ]);
                $user->assignRole('contributor');

                UserActivation::create([
                    'user_id' => $user->id
                ]);

                session()->invalidate();

                return redirect()->route('user.activation', ['username' => $user->username]);

                // auth('web')->login($user);
                // session()->regenerate();
                // return redirect('/');
            }

            if ($user->is_active === 0 || $user->activation_status->id_card == null || $user->activation_status->bank_passbook == null) return redirect()->route('user.activation', ['username' => $user->username]);

            auth('web')->login($user);
            session()->regenerate();

            return redirect('/');
        } catch (\Throwable $th) {
            return back()->withErrors([
                'email' => 'Terjadi kesalahan pada Sadayana',
            ])->onlyInput('email');
        }
    }


    /**
     * @param $provider
     * @return \Illuminate\Http\RedirectResponse
     */
    public function logout(Request $request)
    {
        Auth::logout();
        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return redirect('/');
    }
}
Editor is loading...
Leave a Comment