资讯专栏INFORMATION COLUMN

vue-cli vuelidate基于后端数据验证注册

chunquedong / 2067人阅读

摘要:介绍在实现基本的验证之后我们需要去真正实现项目中的注册登录以及我们的验证流程有的具体的代码我也会放到我的上面后端以及数据准备对于前端的请求以作为后端项目需要对数据进行处理和相应的反馈我们可以先去创建在项目终端生成后就去定义好字段信息

介绍

在实现vuelidate基本的验证之后 我们需要去真正实现项目中的注册登录以及我们的验证流程

有的具体的代码我也会放到我的gist上面

后端api以及数据准备

对于前端的请求 以laravel作为后端项目需要对数据进行处理和相应的反馈

我们可以先去创建User Model在项目终端:

$ php artisan make:model User -m

生成Model后就去定义好字段信息:

 public function up()
    {
        Schema::create("users", function (Blueprint $table) {
            $table->increments("id");
            $table->string("name");
            $table->string("email")->unique();
            $table->string("password");
            $table->string("avatar");//保存用户头像
            $table->string("confirm_code",64);//邮箱确认激活code
            $table->smallInteger("is_confirmed")->default(0);//判断用户呢是否已经激活他的邮箱
            $table->integer("followers_count")->default(0);
            $table->integer("followings_count")->default(0);
            $table->rememberToken();
            $table->timestamps();
        });
 }

我们也可以尝试创建对应的Factory然后可以生成测试数据:

$factory->define(AppUser::class, function (FakerGenerator $faker) {
    static $password;

    return [
        "name" => $faker->name,
        "email" => $faker->unique()->safeEmail,
        "avatar" => $faker->imageUrl(256, 256),
        "confirm_code" => str_random(48),
        "password" => $password ?: $password = bcrypt("secret"),
        "remember_token" => str_random(10),
    ];
});

写好模型工厂后我们可以试着生成几个测试数据 项目终端:

$ php artisan tinker;
$ namespace App;
$ factory(User::class,4)->create()

现在我们已经准备好测试数据 当然你也可以使用注册过后的数据

开始注册之前先去生成对应的Controller

我的laravel后端项目是5.4 而在5.4里面新增了控制器与模型的绑定

在项目终端执行:

$ php artisan make:controller UserController --model=User

生成控制器后就去路由定义我们的路由方法:

Route::group(["prefix"=>"user","middleware"=>["api","cors"]], function () {
    Route::post("/register","UserController@store");
});

UserController里面的具体逻辑就是平常的注册逻辑:

public function store(Request $request)
    {
        $data = [
            "avatar" => "/images/avatar/default.png",
            "confirm_code" => str_random(48),
        ];
        $user = User::create(array_merge($request->get("user"),$data));
        return json_encode(["user_id"=>$user->id,"status"=>"success"]);
 }

这样就可以完成注册的后端处理逻辑

vue基于后端api数据进行数据检验

我们的template内容基本还是那样的判断方式 只不过在这里我对字段的唯一性的针对用户名和邮箱

所以我的具体validations是这样的:

validations: {
    newUser:{
       name: {
            required,
            minLength: minLength(4),
            async isUnique (value) {
               if (value === "") return true
               const response = await fetch(`http://localhost:8000/api/unique/name/${value}`)
               return Boolean(await response.json())
            }
       },
       email: {
            required,
            email,
            async isUnique (value) {
               if (value === "") return true
               const response = await fetch(`http://localhost:8000/api/unique/email/${value}`)
               return Boolean(await response.json())
            }
       },
       password: {
           required,
           minLength: minLength(6)
       },
       confirm_pwd: {
            required,
            sameAsPassword: sameAs("password")
       }
    }
},

当然这只是对字段检验的要求 后端的检验路由方法:

Route::group(["prefix"=>"unique","middleware"=>["api","cors"]], function () {
    Route::get("/name/{value}","ValidateController@ValidateName");
    Route::get("/email/{value}","ValidateController@ValidateEmail");
});

这里我是多带带生成了一个Controller去实现方法逻辑

对于用户名的检验:

public function ValidateName($name)
    {
        $res = User::where("name",$name)->count();
        if($res){
            return response()->json(false);
        }
        return response()->json(true);
}

当然对于邮箱的检验也是一样的

这些完成后我们再去前端完成我们的注册方法应该就差不多可以了 但其实并不是

因为注册的前提的是每个字段都符合要求 这样才可以去进行注册这个逻辑

所以在注册按钮添加方法:

这里的$v.newUser其实就是所有被检验数据的集合 因为我的data是这样被声明的:

 data(){
    return{
        newUser: {
            name:"",
            email:"",
            password:"",
            confirm_pwd:""
        },
    }
},

这样完成好后 最终的注册逻辑被我放在了register function里面

register:function(value){
    value.$touch();//验证所有信息
    if(!value.$error){
        this.axios.post("http://localhost:8000/api/user/register",{user:this.newUser}).then(response => {
          console.log("data = "+response.data.status)
        })
    }
}

这里的value.$error是对所有字段的$error的或的结果 只有所有字段的$errorfalse时 才能通过检验进行下一步的注册

value.$touch() 其实是执行的设置其$dirtytrue这些在文档上也都有介绍

这样我们去走一下整个的注册流程

用户注册

我们已经注册过了以为jason的用户

数据检验

登录过程的基本逻辑也就是我们通常的登录无非就是像这样进行数据的校对和数据的返回

资料链接

vuelidate网址

gist地址1

gist地址2

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/22470.html

相关文章

  • vuelidate 对于vueJs2.0的验证解决方案

    摘要:介绍在后端项目里比如我们的框架对于表单验证有自己的一套机制他将验证集成在我们只需要在我们的方法中依赖注入我们自己实例化后的验证类当然也可以直接去在方法里去验证表单数据而在我们的前端的项目里也就是在我们的项目里也有比较好的验证解决方案也就是这 介绍 在后端项目里 比如我们的Laravel框架 对于表单验证有自己的一套validation机制 他将验证集成在FormRequest 我们只...

    zhangwang 评论0 收藏0
  • Vue后端程序员极速入门

    摘要:前言因为我就是主攻后端的程序员,前端感觉就是知道个大概就行,所以就是自己学着些皮毛罢了,想掌握的同学们建议看其他人的文章嗷。然后我们在中局部注册使用组件如上,引入组件,然后中注册组件即可。 ...

    or0fun 评论0 收藏0
  • Vue+Express全栈购物商城

    摘要:一前言提纲基于和框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。服务端技术栈登录授权用认证机制,来实现登录登出。服务器配置和缓存策略,根据不同的来代理。申请证书全站升级到,配置的协议。一、前言提纲 基于Vue和Express框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。 二、历史版本 基于Vue-CLI2.0:点我查看 这个分支版本是一两年前...

    Richard_Gao 评论0 收藏0
  • Vue+Express全栈购物商城

    摘要:一前言提纲基于和框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。服务端技术栈登录授权用认证机制,来实现登录登出。服务器配置和缓存策略,根据不同的来代理。申请证书全站升级到,配置的协议。 一、前言提纲 基于Vue和Express框架写的一个全栈购物商城,记录项目过程中遇到的一些问题以及经验和技巧。 二、历史版本 基于Vue-CLI2.0:点我查看这个分支版本是一两...

    luzhuqun 评论0 收藏0

发表评论

0条评论

chunquedong

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<