egg(101)--egg之註冊 輸入密碼完成註冊 完成註冊後實現登陸

router.js

router.get('/register/registerStep3', initMiddleware, controller.default.pass.registerStep3);
    router.post('/pass/doRegister', initMiddleware, controller.default.pass.doRegister);

model

app/model/user.js
module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;

    var d = new Date();
    const User = new Schema({
        password: { type: String },
        phone: { type: Number },
        last_ip: { type: String },
        add_time: {
            type: Number,
            default: d.getTime()
        },
        email: { type: String },
        status: {
            type: Number,
            default: d.getTime()
        }
    });

    return mongoose.model('User', User, 'user');
}

註冊頁面

controller

app/controller/default/pass.js
async registerStep3() {
            var sign = this.ctx.request.query.sign;
            var phone_code = this.ctx.request.query.phone_code;
            var msg = this.ctx.request.query.msg || '';
            var add_day = await this.service.tools.getDay(); //年月日   
            var userTempResult = await this.ctx.model.UserTemp.find({ "sign": sign, add_day: add_day });

            if (userTempResult.length == 0) {

                this.ctx.redirect('/register/registerStep1');
            } else {


                await this.ctx.render('default/pass/register_step3.html', {
                    sign: sign,
                    phone_code: phone_code,
                    msg: msg
                });
            }
        }

view

appviewdefaultpassregister_step3.html
<form action="/pass/doRegister?_csrf=<%=csrf%>" method="post" id="form">


                    <input type="hidden" name="sign" value="<%=sign%>" />
                    <input type="hidden" name="phone_code" value="<%=phone_code%>" />
                    <div>
                        <input class="form_input" type="password" id="password" name="password" placeholder="請輸入密碼" />

                    </div>

                    <div>
                        <input class="form_input" type="password" id="rpassword" name="rpassword" placeholder="請輸入確認密碼" />

                    </div>

                    <%if(msg){%>
                        <p style="color:red">
                            <%=msg%>
                        </p>

                        <%}%>

                            <div class="regist_submit">
                                <input class="submit" id="nextStep" type="submit" name="submit" value="下一步">

                            </div>
                </form>
$(function() {
            $("#form").submit(function() {

                var password = $('#password').val();

                var rpassword = $('#rpassword').val();


                if (password.length < 6) {

                    alert('用戶名的長度不能小於6位');

                    return false;
                }

                if (password != rpassword) {

                    alert('密碼和確認密碼不一致');

                    return false;
                }

                return true;


            })
        })

效果

clipboard.png

提交註冊,跳轉到首頁

controller

app/controller/default/pass.js
async doRegister() {

        var sign = this.ctx.request.body.sign;
        var phone_code = this.ctx.request.body.phone_code;
        var add_day = await this.service.tools.getDay(); //年月日       
        var password = this.ctx.request.body.password;

        var rpassword = this.ctx.request.body.rpassword;


        var ip = this.ctx.request.ip.replace(/::ffff:/, '');

        if (this.ctx.session.phone_code != phone_code) {
            //非法操做
            this.ctx.redirect('/pass/registerStep1');
        }

        var userTempResult = await this.ctx.model.UserTemp.find({ "sign": sign, add_day: add_day });

        if (userTempResult.length == 0) {
            //非法操做
            this.ctx.redirect('/pass/registerStep1');
        } else {

            //傳入參數正確 執行增長操做

            if (password.length < 6 || password != rpassword) {
                var msg = '密碼不能小於6位而且密碼和確認密碼必須一致';
                this.ctx.redirect('/register/registerStep3?sign=' + sign + '&phone_code=' + phone_code + '&msg=' + msg);
            } else {
                var userModel = new this.ctx.model.User({
                        phone: userTempResult[0].phone,
                        password: await this.service.tools.md5(password),
                        last_ip: ip
                    })
                    //保存用戶
                var userReuslt = await userModel.save();

                if (userReuslt) {

                    //獲取用戶信息

                    var userinfo = await this.ctx.model.User.find({ "phone": userTempResult[0].phone }, '_id phone last_ip add_time email status')

                    //用戶註冊成功之後默認登陸

                    //cookies 安全      加密
                    this.service.cookies.set('userinfo', userinfo[0]);

                    this.ctx.redirect('/');
                }

            }

        }


    }

中間件

app/middleware/init.js
ctx.state.csrf = ctx.csrf; //全局變量
        //獲取用戶信息
        ctx.state.userinfo = ctx.service.cookies.get('userinfo');

view

app/view/default/public/header.html
<%if(userinfo && userinfo.phone){%>
                            <li>
                                <a href="#">
                                    <%=userinfo.phone%>
                                </a>
                            </li>
                        <%}%>

效果

clipboard.png

相關文章
相關標籤/搜索