質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

Laravelで新規ユーザー登録後に画面遷移しない問題

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,635

score 1

Laravelで新規登録後にプロフィール画面に遷移させたいのですが、登録の処理は出来ているし、ChromeのデベロッパーツールでNetworkで通信を確認してもちゃんとPOSTされた後にリダイレクトしたいURLもResponseで返ってきているのですが、何故か画面は切り替わらず登録画面のままです、プロパティのリダイレクト先も変更したのですが、原因がいくら調べてもわかりません何故なのか分かる方いらっしゃいますか

**register**

Request URL: http://homestead.test/register
Request Method: POST
Status Code: 302 Found
Remote Address: 192.168.20.10:80
Referrer Policy: no-referrer-when-downgrade

**profile**
Request URL: http://homestead.test/mypage/profile
Request Method: GET
Status Code: 200 OK
Remote Address: 192.168.20.10:80
Referrer Policy: no-referrer-when-downgrade

web.php

Route::get('/mypage/profile', 'UserController@showProf')->name('mypage.prof');

UserController.php

// プロフィール画面表示
    public function showProf()
    {
        $user = Auth::user();
        return view('user.prof', [
            'user' => $user,
        ]);
    }

Router.php

public function auth(array $options = [])
    {
        // Authentication Routes...
        $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
        $this->post('login', 'Auth\LoginController@login');
        $this->get('logout', 'Auth\LoginController@showLogout')->name('logout');
        $this->post('logout', 'Auth\LoginController@logout');

        // Registration Routes...
        if ($options['register'] ?? true) {
            $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
            $this->post('register', 'Auth\RegisterController@register');
        }
        $this->get('withdraw', 'Auth\RegisterController@showWithdraw')->name('withdraw');


        // Password Reset Routes...
        if ($options['reset'] ?? true) {
            $this->resetPassword();
        }

        // Email Verification Routes...
        if ($options['verify'] ?? false) {
            $this->emailVerification();
        }
    }

RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

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

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/mypage/profile';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:6',],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

RegistersUsers.php

<?php

namespace Illuminate\Foundation\Auth;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;

trait RegistersUsers
{
    use RedirectsUsers;

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        return view('auth.register');
    }

    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        event(new Registered($user = $this->create($request->all())));

        $this->guard()->login($user);

        return $this->registered($request, $user)
            ?: redirect($this->redirectPath());

    }

    /**
     * Get the guard to be used during registration.
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard();
    }

    /**
     * The user has been registered.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function registered(Request $request, $user)
    {
        //
    }

}

register.blade.php

@extends('layouts.app2')

@section('title', '会員登録')

@section('content')
    <div id="app">
        <user-register></user-register>
    </div>
@endsection

UserRegister.vue

<template>
    <div class="l-form p-form">
        <h2 class="l-form__head p-form__head">
            新規会員登録
        </h2>

        <div class="l-form__body p-form__body">
            <div class="l-form-conteiner">
                <div class="form-group">
                    <label for="email" class="l-form__label p-form__label">メールアドレス</label>
                    <span class="label-require">必須</span>
                    <input id="email" class="l-form__input p-form__input" :class="{ hasErr: errors.email }" type="text" v-model="email" placeholder="PC・携帯どちらでも可">
                    <div class="area-msg">
                        {{ errors.email }}
                    </div>
                </div>


                <div class="form-group">
                    <label for="password" class="l-form__label p-form__label">パスワード</label>
                    <span class="label-require">必須</span>
                    <input id="password" class="l-form__input p-form__input" :class="{ hasErr: errors.password }" type="password" v-model="password" placeholder="6文字以上の半角英数字">
                    <div class="area-msg">
                        {{ errors.password }}
                    </div>
                </div>

                <button type="button" class="p-btn btn-primary" @click="register">登録する</button>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        data: function() {
            return {
                email: '',
                password: '',
                errors: ''
            }
        },
        methods: {
            register: function () {

                this.errors = {};

                var self = this;
                var url = '/register';
                var params = {
                    email: this.email,
                    password: this.password,
                };
                axios.post(url, params)
                .then(function (response) {
                    self.email = '';
                    self.password = '';
                })
                .catch(function (error) {

                    var responseErrors = error.response.data.errors;
                    var errors = {};

                    for(var key in responseErrors) {

                        errors[key] = responseErrors[key][0];

                    }

                    self.errors = errors;
                });
            }
        },
        mounted() {
            console.log('Component mounted.')
        }
    }
</script>

追記(試したこと)
①RegisterController.phpの

protected $redirectTo = '/home';


これを

protected $redirectTo = '/mypage/profile';


これに変えた。

②RegisterController.phpに

protected function redirectTo()
    {
        return route('mypage.prof');
    }


上記のredirectToメソッドを作成

③ブラウザをChromeでやっていたので、safariに変えてみた

④vagrantとhomesteadでサーバーを立ててやっていたので、php artisan serveの方でやってみた

⑤php artisan キャッシュクリア系のコマンドでキャッシュクリアしてみた

上記のことを試しても挙動が変わりませんでした。自分で調べれる限りは試してみたのですがエラーも出ていないしさっぱり原因がわかりません。他に考えうる原因はあるのでしょうか?

ちなみに下記画像のように遷移先のURLはGETでResponseがちゃんと返ってきています
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

https://qiita.com/tiwu_dev/items/2a95baecb8c23eef3c67

redirectTo()$redirectToよりも優先されます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/09/01 10:44

    回答ありがとうございます。RegisterController内にredirectToメソッド作成し、/mypage/profileへのパスを通したのですが、挙動は変わりませんでした。試しにLoginControllerにも同じ処理を書きましたがこれもだめみたいです。Responseはちゃんと返って来てるのに、画面だけ切り替わらないって一体なんなんでしょう

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る