繁体   English   中英

登录后将用户重定向到页面

[英]redirect user to a a page after he login

我的主页上有一个链接“创建帖子”以创建新帖子( <a href="{!! route('post.create') !!}">Create Post</a> )。

单击此链接后,如果用户通过了身份验证,则应允许他访问此创建帖子页面。

但是,如果用户未通过身份验证,则应将其重定向到登录/注册页面。 登录后,应将他重定向到创建帖子页面。

我有下面的代码来执行此操作,但是当用户没有帐户并单击“创建帖子”时,如果用户登录出现错误,他将被重定向到登录页面:

 Type error: Argument 2 passed to App\Http\Controllers\Auth\LoginController::authenticated() must be an instance of App\Http\Controllers\Auth\User, instance of App\User given.

路线:

Route::group(['prefix' => 'users ', 'middleware' => 'auth'], function(){
    Route::post('/post/store', [
        'uses' => 'PostController@store',
        'as'   => 'post.store'
    ]);

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

Auth::routes();

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

登录控制器:

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

您想使用intended方法重定向到他们尝试访问的页面。

重定向器上的预期方法会将用户重定向到他们尝试访问的URL,然后再被身份验证中间件拦截。 在预期的目标不可用的情况下,可以为此方法提供后备URI。

您看到的是由于传入的User模型实例应该是Illuminate\\Contracts\\Auth\\Authenticatable 从方法签名中删除类型提示,它应该可以工作:

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

确保您的User模型实现了Illuminate\\Contracts\\Auth\\Authenticatable合同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM