2016-06-29 13 views
7

私はそうでなければにリダイレクトされ、ユーザーがURLでGETパラメータがある場合のみバックリダイレクトされるログインシステムを実装しようとしていますプロフィールページ。Laravel 5

URIはこのような何か(無GETパラメータ)

/login 

成功の場合であれば、ユーザーはプロフィールページにリダイレクトされます。

しかし、URIは例えば

/login?r=articles 

などのGETパラメータを持っている場合、ユーザーは、代わりにプロファイルページへのデフォルトルートの記事ページにリダイレクトされます。可能であれば

質問は、コントローラには、どのように、これを行うことができているか、どのように私は、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> 

感謝。更新

は事実が、私はまだLaravelを知ってもらうことだし、私はあなたたちが共有して適切なソリューションを実装することができない理由はおそらくだということです、ご回答ありがとうございました。

は、これは、私は、ユーザーが、それは$応答残りの引数で渡されるフォームを送信した後、クエリの値と、このように保持している条件付き隠しフィールドを作成することにより、作業それを得た、と述べました。そのよう

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(); 
} 

、それが動作します。それはLaravel 5でそれを行うために実行可能な、安全な方法だ場合

は分からないのですが、それが働いています。

+0

私の回答を受け入れてください – msonowal

+0

申し訳ありません@ManashSonowalしかし、私はまだそれを動作させることはできません... – Bruno

答えて

9

あなたがそのようなlogin?r=articlesとしてURIを持っている場合、あなたはこのようなarticlesを取得できます。

request()->r 

私はそれがURIで存在だ場合にも決定するためにrequest()->has('r')を使用することができると信じています。

+0

ありがとう@ user2094178 $ _GETを置き換えることができます。var – Bruno

+0

偉大な答えです。ありがとうございました – kikuyu1

2

//クエリのみ

$query_array = $request->query(); 

または

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

//クエリ文字列がなければ...クエリ文字列で

$url = $request->url(); 

// ...

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

私はlaravelを使用しているので、私はLaravelのfunctiionalitiesを使用したいと思います。 – Bruno

+0

私の更新された回答を参照してください。 –

+0

ありがとう@laraveluser – Bruno

3

あなたはLaravelを使用している場合は、あなたのルートやURLが認証middlewereを持っているつまりあれば、ちょうど箱の外に働く彼らのヘルパーを使用し、ユーザーは、それがログインに行くにして、postSignまたは内部の試みだけ

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

UserControllerでログインしていない

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

それを働かせることができませんでした – Bruno

+0

あなたはより記述できますか?エラーが何だったのか、私はあなたを導くことができるようにステータスは何ですか? – msonowal