【问题标题】:form request validation in laravel 6 and vue does not triggering anythinglaravel 6中的表单请求验证和vue不会触发任何东西
【发布时间】:2019-12-29 01:43:03
【问题描述】:

我正在使用 laravel 6 和 vueJs;我想使用自定义 laravel 表单请求来验证表单请求。但它不会触发任何验证错误,而是给出此错误消息(500(内部服务器错误))。

这是我的代码。如果有人可以帮助我将不胜感激。

注册.vue

<template>
    <v-container>
        <v-form @submit.prevent="signup" class="signup-form">
            <v-text-field
                label="Name"
                v-model="form.name"
                type="text"
                required
            ></v-text-field>

            <v-text-field
                label="E-mail"
                v-model="form.email"
                type="email"
                required
            ></v-text-field>

            <v-text-field
                label="Password"
                v-model="form.password"
                type="password"
                required
            ></v-text-field>

            <v-text-field
                label="Password_confirmation"
                v-model="form.Password_confirmation"
                type="password"
                required
            ></v-text-field>

            <v-btn type="submit" color="green">signup</v-btn>

            <router-link to="/login">
                <v-btn color="blue">Login</v-btn>
            </router-link>

        </v-form>
    </v-container>
</template>

<script>

    export default {
        data() {
            return {
                form: {
                    name: null,
                    email: null,
                    password: null,
                    password_confirmation: null
                }
            }
        },
        errors: {},
        methods: {
            signup() {
                axios.post('/api/auth/signup', this.form)
                    .then(res => this.responseAfterLogin(res))
                    .catch(error => console.log(error.response.data))
            }
        },
    }
</script>

<style>
    .signup-form {
        margin-top: -120px;
        margin-bottom: 15px;
    }
</style>

授权控制器:

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Requests\SignupRequest;


class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('JWT', ['except' => ['login', 'signup']]);
    }


    /**
     * Get a JWT via given credentials.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function login()
    {
        $credentials = request(['email', 'password']);

        if (!$token = auth()->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    /**
     * Signup part added manually
     */
    public function signup(Request $request)
    {
        $data = $request->validate([
            'name'     => 'required',
            'email'    => 'required|string',
            'password' => 'required|string',

        ]);


        User::create($request->all()); // the problem is not bcrypting the password section
        // login the registered user
        return $this->login($request);
    }


    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(auth()->user());
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        auth()->logout();

        return response()->json(['message' => 'Successfully logged out']);
    }

    /**
     * Refresh a token.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }

    /**
     * Get the token array structure.
     *
     * @param string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type'   => 'bearer',
            'expires_in'   => auth()->factory()->getTTL() * 60,
            'username'     => auth()->user()->name,
        ]);
    }
}

注册请求:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class SignupRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name'     => 'required',
            'email'    => 'required',
            'password' => 'required|confirmed',
        ];
    }
}

【问题讨论】:

  • 您收到的 500 错误消息是什么?
  • 你没有在任何地方使用SignupRequest
  • 当我打开网络时,控制台中出现 POST 127.0.0.1:8000/api/auth/signup 500 (Internal Server Error) 错误,没有响应数据

标签: laravel vue.js


【解决方案1】:

您必须在控制器上为工作定义规则定义 SignupRequest 类。注册功能的示例用法,

     public function signup(SignupRequest $request)
     {
        User::create($request->all()); // the problem is not bcrypting the password section
        // login the registered user
        return $this->login($request);
     }

您还应该在登录功能上定义 $token 变量。 最后,您可以在 storage/logs/ 文件夹下的文件中找到错误详细信息。

希望对您有所帮助。

【讨论】:

  • use App\Http\Requests\SignupRequest他们已经导入了类。
  • 我在控制器顶部导入了 SignupRequest 并使用 SignupReqest 而不是简单的 Request 但仍然给我 500 内部服务器错误
  • #3 [interna {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 1): Uncaught ErrorException: Undefined variable: Exception in F :\\Learning\\Udemy\\RealTime Single Page Forum App with Pusher Laravel & vuejs\\projects\\ ealtimeApp\\app\\Exceptions\\Handler.php:50 堆栈跟踪:
  • 关于未定义变量的错误,我认为登录函数有问题,因为之前没有定义 $token 变量。
猜你喜欢
  • 1970-01-01
  • 2015-06-09
  • 2019-11-14
  • 2016-09-22
  • 2016-09-02
  • 1970-01-01
  • 2016-05-23
  • 2016-03-11
相关资源
最近更新 更多