2016-06-29 46 views
7

Kullanıcının yalnızca URL'de get parametresi varsa yeniden yönlendirileceği bir oturum açma sistemi uygulamaya çalışıyorum, aksi halde yeniden yönlendirilecek profil sayfası. uri böyle bir şey (herhangi olsun parametresi)Laravel 5 denetleyicinin oturum açma yöntemiyle url'den parametre al parametre

/login 

başarı varsa eğer

Yani, kullanıcı profili sayfaya yönlendirme olacaktır.

Ama

uri kullanıcı makaleleri sayfanın yerine profil sayfasına varsayılan yoluna yönlendirilecektir
/login?r=articles 

örneğin

için nasıl olsun parametresi varsa.

Soru, denetleyicide, mümkünse bunu nasıl yapabilir veya get parametresini nasıl kontrol edebilirim?

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> 

teşekkürler. Güncelleme

gerçeği hala laravel tanımaya çalışıyorum ve Sizlerin paylaştı doğru çözümler uygulayamaz muhtemelen neden olmasıdır, cevaplar için teşekkür ederiz.

Yani, bu, sorgu değerini tutan bir koşullu gizli alan oluşturarak çalıştım ve bu şekilde kullanıcı formu gönderdikten sonra, $ yanıt argümanlarının geri kalanıyla geçirilecek.

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

böylece gibi
// 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(); 
} 

işe yarıyor.

Bunu Laravel 5'de yapmanın uygun ve güvenli bir yolu olup olmadığını bilmiyoruz, ama çalışıyor.

+0

lütfen cevabımı kabul edin – msonowal

+0

Üzgünüz @ManashSonowal ama yine de yapamam ... – Bruno

cevap

9

, böyle articles alabilirsiniz:

request()->r 

Ben URI mevcut olmadığını da belirlemek için request()->has('r') kullanabilirsiniz inanıyoruz.

+0

Teşekkür @ user2094178 $ _GET var – Bruno

+0

yerine geçmesine izin verdi Büyük yanıt. teşekkür ederim – kikuyu1

2

// sadece sorgu

$query_array = $request->query(); 

veya Sorgu dize olmadan

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

//

...Sorgu dize ile
$url = $request->url(); 

//

...

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

Cevabınız için teşekkürler, ancak lavelle kullandığım için Laravel'in işlevlerini kullanmak istiyorum. – Bruno

+0

güncellenmiş cevabımı görün. –

+0

Teşekkür ederiz @laraveluser – Bruno

3

Eğer laravel sonra sadece kutunun çalışır onların yardımcısı kullanmak kullanıyorsanız, yani rota veya URL bir yetkilendirme middlewere varsa ve kullanıcı daha sonra neden giriş gider ve sizin postSign veya iç girişimi sadece

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

UserController giriş yapmadığında

Bir URI gibi login?r=articles olduğunda
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

İşe yaralamadı – Bruno

+0

Daha açıklayıcı olabilir misiniz? hata neydi ya da durum nedir, böylece size rehberlik edebilirim>? – msonowal