2016-11-22 3 views
1

Ich habe die von Laravel eingebaute Benutzerauthentifizierung aufgrund der Anforderungen meiner Anwendung deaktiviert. Wir vertrauen auf SSO von Drittanbietern, um unsere Benutzer zu authentifizieren, und ich konnte Socialite nicht dazu bringen, mit ihrem SSO zu arbeiten. Daher muss ich einen Controller speziell für die Authentifizierung erstellen. Der Controller führt b-e-a-nützlich bis zu dem Teil, wenn ich den Benutzer von der Callback-Route & Controller an den Member Route & Controller umleiten muss. Es wird nicht umgeleitet. Zeitraum. Ich habe jede Methode ausprobiert, von der ich weiß, wie ich auf eine andere Route innerhalb des Controllers umleiten kann und es wird nicht funktionieren.Laravel 5.3 Redirect von der Controller-Methode zu einer anderen Route

Hier ist mein individueller AuthController für 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 [email protected]"); 
     $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/'); 
    } 


} 

Ich habe auch versucht:

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

ohne Glück.

+0

Ich bin mir der folgenden Stackoverflow Antwort bewusst und es hat nicht funktioniert. http://stackoverflow.com/questions/21079280/laravel-redirect-from-controller-to-named-route-with-prams-in-url# – Dave

+0

whar Fehler Informationen, die Sie angetroffen haben? –

+0

Leider keine. Im Moment ist dies nur ein Verarbeitungsskript ohne Ausgabe. Anstatt dass der Benutzer angemeldet und umgeleitet wird, stoppt das Skript einfach und ein weißer Bildschirm wird angezeigt. – Dave

Antwort

1

Sie meinen die $this->createNewUserAndLogin()? Vielleicht versuchen Sie return $this->updateUserAndLogin($user); und return $this->verifyToken();, so dass Sie die Antwort auf die Hauptmethode der Route zurückgeben?

+0

Vielen Dank für Ihre Antwort, aber das hat nicht funktioniert. Ich bin sogar soweit gegangen, den Code von dieser Methode in die handleCallback-Methode zu verschieben und immer noch kein Glück. Trotzdem danke. – Dave

+0

Ich entschuldige mich. Ich habe den zweiten Teil deiner Antwort verpasst, wo du gesagt hast, dass du eine Rückkehr vor $ this-> verifyktoken() machen solltest; Sobald ich das getan habe, wurde die Anwendung umgeleitet. Ich danke dir sehr. – Dave

+0

Super, froh, dass es funktioniert :) –

Verwandte Themen