URLにgetパラメーターがある場合にのみユーザーがリダイレクトされるログインシステムを実装しようとしています。それ以外の場合は、プロファイルページにリダイレクトされます。
したがって、uriがこのようなものである場合(パラメーターを取得しない)
/login
成功した場合、ユーザーはプロファイルページにリダイレクトされます。
しかし、uriにgetパラメーターがある場合、たとえば
/login?r=articles
ユーザーは、プロファイルページへのデフォルトルートの代わりに記事ページにリダイレクトされます。
質問は、コントローラーで、可能であればこれをどのように行うことができますか、またはgetパラメーターを確認するにはどうすればよいですか?
routes.php
// Signin
Route::post('/account/signin', [
'uses' => 'UserController@postSignIn',
'as' => 'user.signin',
]);
serController.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>
ありがとう。
Updated
返信ありがとうございます。事実は、私はまだLaravel.
つまり、クエリ値を保持する条件付き非表示フィールドを作成することで機能し、ユーザーがフォームを送信すると、残りの$ 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();
}
そのように、それは動作します。
Laravel 5で実行可能で安全な方法であるかどうかはわかりませんが、動作しています。
_login?r=articles
_などのURIがある場合、次のようにarticles
を取得できます。
_request()->r
_
request()->has('r')
を使用して、URIに存在するかどうかを判断することもできます。
request()->filled('r')
は、URIに存在し、その値が空でないかどうかを確認します。
あなたがLaravel= postSignまたは内部試行のみ
return redirect()->intended('home'); //home is the fallback if no intended url is provide
serController
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();
}
//クエリのみ
$query_array = $request->query();
または
$query = $request->query('r');
//クエリ文字列なし...
$url = $request->url();
//クエリ文字列を使用...
$url = $request->fullUrl();
最初にこれを使用する
use Illuminate\Support\Facades\Input;
その後、あなたのURLから任意のデータを取得することができます
$name=Input::get('term', false); //term is the parameter name we get from URL