我有一个主页,其中包含“创建帖子”链接以创建新帖子(<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');
}
}
答案 0 :(得分:1)
您希望使用intended
方法重定向到他们尝试访问的网页。
重定向器上的预期方法将用户重定向到他们在被身份验证中间件拦截之前尝试访问的URL。如果目标目的地不可用,则可以为此方法提供回退URI。
您看到的是由于传入User
模型实例,它应该是Illuminate\Contracts\Auth\Authenticatable
。从方法签名中删除类型提示,它应该起作用:
protected function authenticated(Request $request, $user)
{
return redirect()->intended('/createPost');
}
确保您的User
模型实施Illuminate\Contracts\Auth\Authenticatable
合同。