PHP code example of teamupdivision / saltid-provider

1. Go to this page and download the library: Download teamupdivision/saltid-provider library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

teamupdivision / saltid-provider example snippets


    /**
     * Redirect function to external call for authorization step
     *
     * @param Request $request
     * @return RedirectResponse
     */
    public function redirect(Request $request): RedirectResponse
    {
        $redirect = SaltId::driver('saltid')->redirect();
        return $redirect;
    }

    /**
     * Callback function for authorization and get user
     *
     * @param Request $request
     * @return RedirectResponse
     */
    public function callback(Request $request): RedirectResponse
    {
        $saltUser = SaltId::driver('saltid')->user();
        $user = User::where('email',$saltUser->getEmail())->first();

        if(!$user){
            $user = new User;
            $user->name = $saltUser->getName() ? $saltUser->getName() : $saltUser->getEmail();
            $user->email = $saltUser->getEmail();
            $user->password = bcrypt(123456);
            $user->save();
        }

        Auth::login($user);

        return redirect('/dashboard');
    }

    /**
     * Redirect function to external call for authorization step
     *
     * @return JsonResponse
     */
    public function redirect(): JsonResponse
    {
        $redirectTarget = SaltId::driver('saltid')->stateless()->redirect()->getTargetUrl();
        return response()->json([
            'data' => [
                'redirectTarget' =>  $redirectTarget,
            ],
        ]);
    }

    /**
     * Callback function for authorization and get user
     *
     * @return JsonResponse
     */
    public function callback(): JsonResponse
    {
        try {
            $saltUser = SaltId::driver('saltid')->stateless()->user();
        } catch (Throwable) {
            return response()->json([
                'message' => 'Code expired',
            ], 401);
        }

        if (User::where('email', $saltUser->getEmail())->doesntExist()) {
            User::create([
                'name' => $saltUser->getName() ?? $saltUser->getEmail(),
                'email' => $saltUser->getEmail(),
                'password' => Hash::make('password'),
            ]);
        }

        return response()->json([
            'data' => [
                'type' => 'Bearer',
                'access_token' => $saltUser->token,
                'refreshToken' => $saltUser->refreshToken,
                'expiresIn' => $saltUser->expiresIn,
            ],
        ]);
    }

    /**
     * Redirect function to external call for authorization step
     *
     * @param Request $request
     * @return RedirectResponse
     */
    public function redirect(Request $request): RedirectResponse
    {
       $request->session()->put('state', $state = Str ::random(40));

        $request->session()->put(
            'code_verifier', $code_verifier = Str::random(128)
        );

        $codeChallenge = strtr(rtrim(
            base64_encode(hash('sha256', $code_verifier, true))
        , '='), '+/', '-_');

        $query = http_build_query([
            'client_id' =>  config('services.saltid.client_id'),
            'redirect_uri' => config('services.saltid.redirect'),
            'response_type' => 'code',
            'state' => $state,
        ]);

        return redirect(config('services.saltid.url').'oauth/authorize?'.$query);
    }

    /**
     * Callback function for authorization and get user
     *
     * @param Request $request
     * @return RedirectResponse
     */
    public function callback(Request $request): RedirectResponse
    {
        $state = $request->session()->pull('state');
        $codeVerifier = $request->session()->pull('code_verifier');

        throw_unless(
            strlen($state) > 0 && $state === $request->state,
            InvalidArgumentException::class
        );

        $response = Http::asForm()->post(config('services.saltid.url').'oauth/token', [
            'grant_type' => 'authorization_code',
            'client_id' => config('services.saltid.client_id'),
            'client_secret' => config('services.saltid.client_secret'),
            'redirect_uri' => config('services.saltid.redirect'),
            'code_verifier' => $codeVerifier,
            'code' => $request->code,
        ]);

        if($response->failed()) {
            $errorMessage = $response->body();
            return redirect('/login')->with('error',str_replace('"', '', $errorMessage));
        }


        $saltUser = Http::withHeaders([
            'Accept' => 'application/json',
            'Authorization' => 'Bearer '.$response->json()['access_token']
        ])->get(config('services.saltid.url').'api/v1/me');

        $user = User::where('email',$saltUser->json()['data']['email'])->first();

        if(!$user){
            $user = new User;
            $user->name = $saltUser->json()['data']['email'];
            $user->email = $saltUser->json()['data']['email'];
            $user->password = bcrypt(123456);
            $user->save();
        }

        Auth::login($user);

        return redirect('/dashboard');
    }