#php #laravel
Вопрос:
Я пытаюсь перенаправить пользователя на указанный URL-адрес после регистрации. Я сделал это в логине, и это работает. Но всякий раз, когда пользователь регистрируется, я всегда получаю ошибку:
Argument 1 passed to IlluminateAuthSessionGuard::login() must implement interface IlluminateContractsAuthAuthenticatable, null given
.
Я думаю, вероятно, это произошло потому, что я не возвращаю $user из метода создания в RegisterController. Если да, то как это исправить? Я понятия не имею, как это сделать
Вот мой синтаксис RegisterController:
protected function create(array $data) { $intended_url = Session::get('url.intended', url('/')); if (isset($intended_url)) { if ($intended_url == "http://kopinedw.test/checkout") { $cart_cookies = Cookie::get('user_cart'); if (isset($cart_cookies)) { $cart_decode = json_decode($cart_cookies, true); foreach ($cart_decode as $key =gt; $cart_item) { $product = Product::where('id', $cart_item['product_id'])-gt;first(); $user = User::create([ 'name' =gt; $data['name'], 'email' =gt; $data['email'], 'password' =gt; Hash::make($data['password']), 'role' =gt; 'user', ]); Cart::create([ 'product_id' =gt; $product-gt;id, 'user_id' =gt; $user-gt;id, 'price' =gt; $product-gt;price, 'total' =gt; $product-gt;price * $cart_item['quantity'], 'quantity' =gt; $cart_item['quantity'], 'discount' =gt; $product-gt;discount, ]); } Cookie::queue(Cookie::forget('user_cart')); return redirect()-gt;route('checkout'); } } else { return User::create([ 'name' =gt; $data['name'], 'email' =gt; $data['email'], 'password' =gt; Hash::make($data['password']), 'role' =gt; 'user', ]); } } }
protected $redirectTo = '/user/mypanel';
Или, может быть, я могу переопределить функцию перенаправления? Как это сделать? Я думаю о проверке URL-адреса, предназначенного для сеанса, на перенаправление на страницу оформления заказа, если указан предполагаемый URL-адрес.
Для подробного объяснения:
Дело в том, что если пользователь не вошел в систему, он может добавить товар в корзину, который сохраняется в файлах cookie. И когда пользователь нажмет кнопку оформить заказ, пользователь будет перенаправлен на страницу входа в систему, если у пользователя нет учетной записи, ему сначала нужно зарегистрироваться. После регистрации пользователь будет перенаправлен на страницу оформления заказа, а элемент корзины в файлах cookie будет перемещен в таблицу корзины в базе данных.
Спасибо
Ответ №1:
Ах! покопавшись в google и stackoverflow, я наконец нашел способ.
Мне просто нужно создать общедоступную функцию с тем же именем, что и redirectTo, и поместить в нее свой код.
protected function redirectTo() { $intended_url = Session::get('url.intended', url('/')); if (isset($intended_url)) { if ($intended_url == "http://kopinedw.test/checkout") { Cookie::queue(Cookie::forget('user_cart')); return 'checkout'; } } return '/home'; }