2016-06-29 73 views
7

Sto cercando di implementare un sistema di login in cui l'utente verrà reindirizzato solo se è presente un parametro get nell'URL, altrimenti verrà reindirizzato a la pagina del profilo.Laravel 5 come utilizzare il parametro get dall'URL con il metodo di accesso del controller

Quindi, se l'URI è qualcosa di simile (nessun parametro get)

/login 

se il successo, l'utente sarà reindirizzare alla pagina del profilo.

Ma se l'URI ha il parametro get come per esempio

/login?r=articles 

l'utente verrà reindirizzato alla pagina di articoli al posto di quella di default alla pagina del profilo.

La domanda è, nel controller, come può farlo, se possibile, o come posso verificare il parametro get?

routes.php

// Signin 
Route::post('/account/signin', [ 
    'uses' => '[email protected]', 
    'as' => 'user.signin', 
]); 

UserController.php

// Signin 
public function postSignIn(Request $request) 
{ 
    $this->validate($request, [ 
     'login-email' => 'required|email', 
     'login-password' => 'required' 
    ]); 

    if (Auth::attempt(['email' => $request['login-email'], 'password' => $request['login-password']])) 
    { 

     // Tried this, isn't working... (maybe something's missing ??) 
      $redirect = $request->input('r'); 
      if ($redirect) { 
       return redirect()->route($redirect); 
      } 
     // --> 

     return redirect()->route('user.account'); 
    } 
    return redirect()->back(); 
} 

signin.blade.php

<form role="form" action="{{ route('user.signin') }}" method="post" class="login-form" name="login"> 

    <div class="form-group {{ $errors->has('login-email') ? 'has-error' : '' }}"> 
     <label class="sr-only" for="email">Email</label> 
     <input type="text" name="login-email" value="{{ Request::old('login-email') }}" placeholder="Email..." class="form-username form-control" id="form-username"> 
    </div> 

    <div class="form-group {{ $errors->has('login-password') ? 'has-error' : '' }}"> 
     <label class="sr-only" for="password">Password</label> 
     <input type="password" name="login-password" value="{{ Request::old('login-password') }}" placeholder="Password..." class="form-password form-control" id="form-password"> 
    </div> 

    <div class="form-group"> 
     <input type="checkbox" name="remember" value="{{ Request::old('remember') }}" id="remember"> 
     Remember 
    </div> 

    <button type="submit" class="btn">Sign in!</button> 

    <input type="hidden" name="_token" value="{{ Session::token() }}"> 
</form> 

Grazie.

Aggiornato

Grazie a tutti per le vostre risposte, il fatto è che sto ancora conoscere laravel e questo è probabilmente il motivo non riesco a implementare nel modo giusto le soluzioni che voi ragazzi condiviso.

Detto questo, ho funzionato creando un campo nascosto condizionale che contiene il valore della query e in questo modo una volta che l'utente ha inviato il modulo, verrà passato con il resto degli argomenti $ response.

signin.blade.php

<form role="form" action="{{ route('user.signin') }}" method="post" class="login-form" name="login"> 

    <div class="form-group {{ $errors->has('login-email') ? 'has-error' : '' }}"> 
     <label class="sr-only" for="email">Email</label> 
     <input type="text" name="login-email" value="{{ Request::old('login-email') }}" placeholder="Email..." class="form-username form-control" id="form-username"> 
    </div> 

    <div class="form-group {{ $errors->has('login-password') ? 'has-error' : '' }}"> 
     <label class="sr-only" for="password">Password</label> 
     <input type="password" name="login-password" value="{{ Request::old('login-password') }}" placeholder="Password..." class="form-password form-control" id="form-password"> 
    </div> 

    <div class="form-group"> 
     <input type="checkbox" name="remember" value="{{ Request::old('remember') }}" id="remember"> 
     Remember 
    </div> 

    <button type="submit" class="btn">Sign in!</button> 

    <input type="hidden" name="_token" value="{{ Session::token() }}"> 
    <!-- Verify condition --> 
    @if(isset($_GET['referer'])) 
     <input type="hidden" name="referer" value="{{ $_GET['referer'] }}"> 
    @endif 
</form> 

UserController.php

// Signin 
public function postSignIn(Request $request) 
{ 
    $this->validate($request, [ 
     'login-email' => 'required|email', 
     'login-password' => 'required' 
    ]); 

    if (Auth::attempt(['email' => $request['login-email'], 'password' => $request['login-password']])) 
    { 

     // Check for the new argument 'referer' 
     if (isset($request->referer)) { 
      return redirect()->route($request->referer); 
     } 
     // --> 

     return redirect()->route('user.account'); 
    } 
    return redirect()->back(); 
} 

Come così, funziona.

Non so se è un modo praticabile e sicuro per farlo in Laravel 5, ma funziona.

+0

per favore accetta la mia risposta – msonowal

+0

scusa @ManashSonowal ma non riesco ancora a farlo funzionare ... – Bruno

risposta

9

Quando si dispone di un URI, come login?r=articles, è possibile recuperare articles in questo modo:

request()->r 

Credo che si può anche utilizzare request()->has('r') per determinare se è presente nella URI.

+0

Grazie @ user2094178 che ha permesso di sostituire $ _GET var – Bruno

+0

Ottima risposta. Grazie – kikuyu1

2

// solo interrogazione

$query_array = $request->query(); 

o

$query = $request->query('r'); 

// Senza stringa di query ...

$url = $request->url(); 
//

con Query String ...

$url = $request->fullUrl(); 
+0

Grazie per la tua risposta, ma visto che sto usando laravel mi piacerebbe usare le funzionalità di Laravel per farlo. – Bruno

+0

vedere la mia risposta aggiornata. –

+0

Grazie @laraveluser – Bruno

3

se si utilizza laravel quindi utilizzare il loro aiuto che funziona appena fuori dalla scatola, vale a dire se il percorso o l'URL ha un middlewere auth e utente non è connesso in poi va a fare il login e nel vostro Postsign o tentare all'interno solo

return redirect()->intended('home'); //home is the fallback if no intended url is provide 

UserController

0.123.
public function postSignIn(Request $request){ 
$this->validate($request, [ 
    'login-email' => 'required|email', 
    'login-password' => 'required' 
]); 

if (Auth::attempt(['email' => $request['login-email'], 'password' => $request['login-password']])) 
{ 

    return redirect()->intended('user.account); 
} 
return redirect()->back(); 

}

+0

Impossibile farlo funzionare – Bruno

+0

Puoi essere più descrittivo? qual è stato l'errore o qual è lo stato in modo che io possa guidarti>? – msonowal