填写登录表单后如何将用户重定向到/ creatPost?

时间:2018-02-11 21:28:13

标签: laravel

我正在使用laravel auth。我有一个特定于登录的页面" / login"但我有另一页" / createPost"创建一个新帖子。在此创建新帖子页面中,只有在用户未经过身份验证且该区域显示登录表单和注册表单时才会出现该区域,以便用户可以在允许创建新帖子之前登录或注册。

所以有两个链接"登录"和"创建帐户"向用户显示适当的表格。

你是如何将用户重定向到这个" / createPost"用户填写登录表单后的页面?

创建新帖子页

@guest
<h3>Create Post</h3>
<p class="text-center">You need to login or create an account first</p>

<!-- Login and create account links -->

<ul class="nav d-flex justify-content-center" role="tablist">
    <li class="nav-item">
        <a href="#login" data-toggle="tab" role="tab" class=" btn btn-primary">Login</a>
    </li>
    <li class="nav-item">
        <a href="#register" data-toggle="tab" role="tab" class="btn btn-outline-primary">Create account</a>
    </li>
</ul>

<!-- Tabs Content -->

<div class="tab-content registration_body bg-white mt-4" id="tabbb">
    <div class="tab-pane fade show active clearfix" id="login" role="tabpanel" aria-labelledby="home-tab">

        <form class="clearfix" method="POST" action="{{ route('login') }}">
             {{ csrf_field() }}
             <!-- form-groups -->
            <button type="submit" class="btn btn-primary btn d-block w-100">Login</button>
        </form>
    </div>

    <div class="tab-pane fade show  clearfix" id="register" role="tabpanel" aria-labelledby="home-tab">
        <form method="post" class="clearfix" method="POST" action="{{ route('register') }}">
            {{ csrf_field() }}
             <!-- form-groups -->
            <button type="submit" class="btn btn-primary btn d-block w-100">Create Account</button>
        </form>
    </div>
</div>
@endguest



 @if(\Auth::check())

   <form method="post" class="clearfix" action="{{route('post.store')}}">
                         fields to create a new post...
   </form>
@endif

登录控制器:

class LoginController extends Controller
{  
    use AuthenticatesUsers;
    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }
}

注册控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{


    use RegistersUsers;


    protected $redirectTo = '/home';


    public function __construct()
    {
        $this->middleware('guest');
    }


    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }


    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),

        ]);
    }

}

完整登录控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{

    use AuthenticatesUsers;


    protected $redirectTo = '/home';


    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function authenticated(Request $request, User $user)
    {
        return redirect()->intended('/createPost');
    }
}

路线

Route::group(['prefix' => 'users ', 'middleware' => 'auth'], function(){

    Route::get('/createPost', [
        'uses' => 'PostController@create',
        'as'   => 'post.create'
    ]);

    Route::post('/post/store', [
        'uses' => 'PostController@store',
        'as'   => 'Post.store'
    ]);


});


Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

2 个答案:

答案 0 :(得分:2)

<强> LoginController.php

/**
 * The user has been authenticated.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  mixed  $user
 * @return mixed
 */
protected function authenticated(Request $request, User $user)
{
    return redirect()->intended('/home');
}
  

重定向器上的intended方法会将用户重定向到他们在被身份验证中间件拦截之前尝试访问的URL。如果目标目的地不可用,则可以为此方法提供回退URI。

答案 1 :(得分:0)

有几种不同的方法可以做到这一点。

1)重定向back方法

return redirect()->back();
// or more concise
return back();

2)通过以下方式返回上一个网址:

URL::previous()

3)http引用标题

request()->headers->get('referer')