React学习(七)——简单的用户名密码验证实现

react

    大家好,我是凯文,通过之前的学习,我们已经对React框架以及其使用方法有了一个系统地了解,本篇文章将介绍:如何在React页面中实现用户名和密码验证。

    本篇文章涉及React.js、node.js、npm、express(或是其他后台服务器)、Semantic-ui(UI控件)。

    其中部分知识可以参照我之前的文章:

    凯文的React项目搭建教程:  https://blog.csdn.net/daxiazouyizou/article/details/79743832   

    凯文的React组件和数据传递教程:    https://blog.csdn.net/daxiazouyizou/article/details/79748078

    凯文的CSS样式设置教程:        https://blog.csdn.net/daxiazouyizou/article/details/79758558

    凯文的服务器连接教程:        https://blog.csdn.net/daxiazouyizou/article/details/79773307

    那我们首先来确定一下需求,也就是我们要实现什么样的功能: 页面中需要包含‘用户名输入框’、‘密码输入框’、‘提交按钮’、‘重置按钮’,在输入用户名和密码之后按下提交按钮则连接api接口,访问服务器并传回信息。

    其中,前端页面将搭载在React框架上,并采用Semantic-ui作为外观控件,各位也可以自行定义CSS样式来构建页面UI。连接api接口的方式将采用Fetch发送Post请求并传出json格式的数据,api传回的也将是json格式的数据。

    后台服务器将采用node.js平台上的express服务器框架,各位也可以采用自己熟悉的后台技术来搭建服务器,本次的功能十分简单,所以服务器的搭建并不费力,各位可以直接按照本文教程一步一步做。

    好了,下面我们就正式开始搭建项目,首先创建出基本的React项目文件夹,具体步骤可以参照上面给出的链接(主要是前两个),下面将直接采用‘第二个链接’中的结果进行改造。

    根据链接中的步骤搭建完毕后,我们使用 npm start 开启项目,在 localhost:3000 地址中可以看到:

        

    View.js文件内容如下所示:

import React from 'react';


class View extends React.Component {

constructor(props) { //构造函数

super(props);

this.state = {

}

}

render(){

return(<div>{this.props.text}</div>)

}

}

export default View;

    现在我们要在项目中引入Semantic-ui,步骤如下(进入项目目录,在CMD命令行中输入):

        cnpm i --save-dev semantic-ui-react

        cnpm install semantic-ui-css --save

    等待其运行完毕,然后再index.js中引入css样式:

import 'semantic-ui-css/semantic.min.css';

    然后,所有在index.js之下的js文件都可以使用Semantic-ui控件了,官网地址: https://react.semantic-ui.com/

    下面我们对View.js文件进行改造,内容如下:

import React from 'react';

import { Segment, Input, Button } from 'semantic-ui-react'


class View extends React.Component {

constructor(props) { //构造函数

super(props);

this.state = {

}

}

render(){

return(

<div style={{margin:'10px'}}>

<Segment style={{textAlign:'center'}}>

<h2>请登录</h2>

<Input id='user' placeholder='用户名' style={{marginBottom:'10px'}}/><br/>

<Input id='password' type='password' placeholder='密码' style={{marginBottom:'10px'}}/>
                <br/>

<Button primary content='登录' style={{marginBottom:'10px'}}/>

<Button content='重置' style={{marginLeft:'20px'}}/>

</Segment>

</div>

)

}

}

export default View;

    我们在页面中添加了两个Input框和两个Button按钮,这些都是Semantic自带的组件,对原生HTML中的<input>和<button>进行了改造。修改完之后,页面显示变成了如下所示:

    

    好,现在我们已经搭建了显示的内容,现在需要使得React框架获取到用户名和密码,并将其储存到State中,用于作进一步的处理(React中的数据交互一般使用State和Props作为储存地和媒介,详情介绍可以参照‘第二个链接’)

    我们给两个Input框配置 onChange 属性,当Input框的内容被改变的时候,就自动调用onChange中的函数,然后再函数中使用setState将用户名和密码储存到state中,然后给登录按钮设置了onClick属性,功能暂时设为:点击时自动弹出state中的用户名和密码,以此来检验是否输入。

    代码如下(对代码结构做了个整理):

import React from 'react';

import { Segment, Input, Button } from 'semantic-ui-react'


class View extends React.Component {

constructor(props) { //构造函数

super(props);

this.state = {

user:'',

password:'',

}

this.userChange = this.userChange.bind(this);

this.passwordChange = this.passwordChange.bind(this);

this.submit = this.submit.bind(this);

}


userChange(e){

this.setState({ user : e.target.value })

}


passwordChange(e){

this.setState({ password : e.target.value })

}


submit(){

window.alert(this.state.user)

window.alert(this.state.password)

}


render(){

return(

<div style={{margin:'10px'}}>

<Segment style={{textAlign:'center'}}>

<h2>请登录</h2>

<Input

id='user'

placeholder='用户名'

style={{marginBottom:'10px'}}

onChange={this.userChange}

/><br/>

<Input

id='password'

type='password'

placeholder='密码'

style={{marginBottom:'10px'}}

onChange={this.passwordChange}

/><br/>

<Button

primary

content='登录'

style={{marginBottom:'10px'}}

onClick={this.submit}

/>

<Button

content='重置'

style={{marginLeft:'20px'}}

/>

</Segment>

</div>

)

}

}

export default View;

    现在,当我们输入用户名:123,密码:qwe 后,按下登录按钮,就会连续弹出用户名和密码值,各位也可以使用console.log( ) 来把 this.state.user 和 this.state.password 输出到控制台中。

    注意,调用的函数要绑定this,在构造函数中使用 this.userChange = this.userChange.bind(this); 不然会出错

    效果如下:

    现在,我们能够成功地通过点击登录按钮来显示state里面的用户名和密码信息了,但现在只是前端的部分,还需要通过api接口来连接后台服务器才能完成这一功能。

    下面我们就来试着搭建一下后台服务器(基于node.js的express服务器框架),各位也可以创建自己熟悉的后台服务器,express服务器创建方法将参照‘第四个链接’。

    另外创建一个项目文件夹名为 my-express-study ,读取地址后在CMD中输入:

        cnpm install express --save

        cnpm install body-parser --save

        cnpm install cookie-parser --save

        cnpm install multer --save

    搭建完成后,在目录下创建 myserver.js 文件,内容如下:

const http = require('http');

var express = require('express');

var app = express();

var bodyParser = require('body-parser');//引入body parser用于解析post的body


app.use(bodyParser.json());//使用body parser用于解析post的body

app.use(bodyParser.urlencoded({ extended: true }));//使用body parser用于解析post的body


app.all('*', function(req, res, next) {

res.header("Access-Control-Allow-Origin", "*");

res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Access-Token");

res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

res.header("X-Powered-By",' 3.2.1')

res.header("Content-Type", "application/json;charset=utf-8");

next();

});


app.use(express.static('public'));


app.post('/password', function (req, res) { //接收POST请求

let data = req.body; //解析body中的信息

console.log(data);

let message1 = {success:true}

let message2 = {success:false}

if(data.user==='凯文'&&data.password==='123456'){ //判断并返回结果

res.send(message1);

}

else res.send(message2);

})


var server = app.listen(8081, function () {

var host = server.address().address

var port = server.address().port

console.log("应用实例,访问地址为 http://%s:%s", host, port)

})




    创建完服务器文件后,用CMD命令行读取地址并输入  node myserver.js 来开启服务器

    然后,我们对View.js文件进行改造,添加Fetch方法来连接api,内容如下:

import React from 'react';

import { Segment, Input, Button } from 'semantic-ui-react'


class View extends React.Component {

constructor(props) { //构造函数

super(props);

this.state = {

user:'',

password:'',

}

this.userChange = this.userChange.bind(this);

this.passwordChange = this.passwordChange.bind(this);

this.submit = this.submit.bind(this);

this.getConnect = this.getConnect.bind(this);

}


userChange(e){

this.setState({ user : e.target.value })

}


passwordChange(e){

this.setState({ password : e.target.value })

}


submit(){

this.getConnect();

}


getConnect(){ //api请求函数

let text = {user:this.state.user,password:this.state.password} //获取数据

let send = JSON.stringify(text); //重要!将对象转换成json字符串

fetch(`http://127.0.0.1:8081/password`,{ //Fetch方法

method: 'POST',

headers: {'Content-Type': 'application/json; charset=utf-8'},

body: send

}).then(res => res.json()).then(

data => {

if(data.success) window.alert('验证成功,欢迎登录');

else window.alert('验证失败,用户名或密码错误')

}

)

}


render(){

return(

<div style={{margin:'10px'}}>

<Segment style={{textAlign:'center'}}>

<h2>请登录</h2>

<Input

id='user'

placeholder='用户名'

style={{marginBottom:'10px'}}

onChange={this.userChange}

/><br/>

<Input

id='password'

type='password'

placeholder='密码'

style={{marginBottom:'10px'}}

onChange={this.passwordChange}

/><br/>

<Button

primary

content='登录'

style={{marginBottom:'10px'}}

onClick={this.submit}

/>

<Button

content='重置'

style={{marginLeft:'20px'}}

/>

</Segment>

</div>

)

}

}

export default View;

    下面我们就可以进行测试了,首先在页面中输入错误的信息,用户名为 qwe,密码为 111,结果如下:


    我们可以看到,服务器接收到错误的用户名或密码时就会返回错误信息

    下面来输入正确的信息,用户名为 凯文,密码为 123456,结果如下:

    输入正确的用户名和密码之后,服务器就会返回验证成功的信息。

    通过本篇文章,我们成功地构建了基于React框架的用户登录界面,并且连接服务器对用户名和密码进行验证,各位可以在这个项目的基础上进行扩充,增加其他的功能,页面中另外的一个重置按钮用来将用户名和密码的输入框清空,就留给大家当作业好了  ╭( ̄▽ ̄)╯   。

    感谢各位,之后还会继续更新React相关文章。

以上是 React学习(七)——简单的用户名密码验证实现 的全部内容, 来源链接: utcz.com/z/384388.html

回到顶部