1

I have opted out of using Laravel's built in User Authentication due to my application's requirements. We rely on a Third Party SSO to authenticate our users, and I was unable to get Socialite to work with their SSO, so I am having to custom build a Controller to handle the authentication process. The Controller is performing b-e-a-utifully up until the part when I need to redirect the user from the Callback Route & Controller to the Member Route & Controller. It won't redirect. Period. I have tried every method I know how to redirect to another route from within the controller and it will not work.

Here is my custom AuthController for Laravel 5.3:

<?php

namespace App\Http\Controllers;

use App\User;
use Curl\Curl;
use App\Http\Controllers\PhealController as Pheal;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
use Illuminate\Routing\Redirector;

class AuthController extends Controller
{

    protected $curl;
    private $data;

    public function __construct ()
    {
        $this->curl = new Curl();
        $this->pheal = new Pheal();
        $this->data = [];
    }
    public function sendToSSO()
    {
        $url = env('EVE_SSO_LOGIN')."?response_type=code&redirect_uri=".env('EVE_CALLBACK_URL')."&client_id=".env('EVE_CLIENT_ID')."&scope=".env('EVE_SCOPES');
        return redirect($url);
    }

    public function handleCallback(Request $request)

    {
        $this->curl->setHeader('Authorization', "Basic ". base64_encode(env('EVE_CLIENT_ID').":".env('EVE_SECRET')));
        $this->curl->setHeader('Content-Type', "application/x-www-form-urlencoded");
        $this->curl->setHeader('Host', "login.eveonline.com");
        $this->curl->post('https://login.eveonline.com/oauth/token', [
            'grant_type' => 'authorization_code',
            'code' => $request->code
        ]);

        $response = $this->curl->response;

        if (isset($response->error)) {
            throw new \Exception($response->error_description);
        }

        $this->data = [
            'accessToken' => $response->access_token,
            'refreshToken' => $response->refresh_token
        ];

        $this->verifyToken();

    }

    public function verifyToken ()
    {

        $this->curl->setHeader('User-Agent', "David Douglas ddouglas@douglaswebdev.net");
        $this->curl->setHeader('Authorization', "Bearer ". $this->data['accessToken']);
        $this->curl->setHeader('Host', "login.eveonline.com");
        $this->curl->get('https://login.eveonline.com/oauth/verify');

        $response = $this->curl->response;

        if (isset($response->error)) {
            throw new \Exception($response->error_description);
        }


        $this->data['characterID'] = $response->CharacterID;
        $this->data['characterName'] = $response->CharacterName;
        $this->data['accessTokenExpire'] = $response->ExpiresOn;

        try {
            $characterInfo = $this->pheal->call('eve', 'CharacterInfo', ['characterID' => $this->data['characterID']])['result'];
        } catch (\Exceoption $e) {
            abort(404);
        }

        if (!isset($characterInfo['allianceID'])) {
            abort(403, "Care Factor Alliance Members Only. Sorry :-(");
        }
        if ($characterInfo['allianceID'] !== env('CF-ALLIANCE-ID')) {
            abort(403, "Care Factor Alliance Members Only. Sorry :-(");
        }

        $this->data['corporationID'] = $characterInfo['corporationID'];
        $this->data['corporation'] = $characterInfo['corporation'];

        $user = User::find($this->data['characterID']);

        if ($user) {
            $this->updateUserAndLogin($user);
        } else {
            $this->createNewUserAndLogin();
        }
    }

    private function getData()
    {
        return $this->data;
    }

    public function createNewUserAndLogin()
    {
        dd('To be Created');
    }
    public function updateUserAndLogin($user)
    {
        $user->corporationID = $this->data['corporationID'];
        $user->corporation = $this->data['corporation'];
        $user->accessToken = $this->data['accessToken'];
        $user->refreshToken = $this->data['refreshToken'];
        $user->accessTokenExpire = $this->data['accessTokenExpire'];
        $user->save();
        //Auth::login($user);

        return redirect('member/dashboard/');
    }


}

I have also tried:

return redirect()->route('member.dashboard');

With no luck.

DevOverlord
  • 456
  • 3
  • 19

1 Answers1

1

You mean the $this->createNewUserAndLogin()? Maybe trying return $this->updateUserAndLogin($user); and return $this->verifyToken(); so you return the response on the main method of the route?

Eduardo Reveles
  • 2,155
  • 17
  • 14
  • Thank You for your answer, but that did not work. I even went as far as moving the code from that method into the handleCallback method and still no luck. Thank You though. – DevOverlord Nov 22 '16 at 01:49
  • I apologize. I missed the second part of your answer where you said to stick a return in front of $this->verifytoken(); Once I did this, the application redirected. Thank You so much. – DevOverlord Nov 22 '16 at 02:55