passport.js

$(function(){

    function isPlaceholder(){
        var input = document.createElement(‘input‘);
        return ‘placeholder‘ in input;
    }
    if(!isPlaceholder()){
        $("input").not("input[type=‘password‘]").each(//把input绑定事件 排除password框
            function(){
                if($(this).val()=="" && $(this).attr("placeholder")!=""){
                    $(this).val($(this).attr("placeholder"));
                    $(this).focus(function(){
                        if($(this).val()==$(this).attr("placeholder")) $(this).val("");
                    });
                    $(this).blur(function(){
                        if($(this).val()=="") $(this).val($(this).attr("placeholder"));
                    });
                }
        });
        //对password框的特殊处理1.创建一个text框 2获取焦点和失去焦点的时候切换
        function removeInput(ele){
            var ele = $(‘.‘+ele);
            var pwdField    = ele.find("input[type=password]");
            var pwdVal      = pwdField.attr(‘placeholder‘);
            pwdField.after(‘<input class="input pwdPlaceholder" type="text" value=‘+pwdVal+‘ autocomplete="off" />‘);
            var pwdPlaceholder = ele.find(‘.pwdPlaceholder‘);
            pwdPlaceholder.show();
            pwdField.hide();  

            pwdPlaceholder.focus(function(){
                pwdPlaceholder.hide();
                pwdField.show();
                pwdField.focus();
            });  

            pwdField.blur(function(){
                if(pwdField.val() == ‘‘) {
                    pwdPlaceholder.show();
                    pwdField.hide();
                }
            });
        }
        removeInput(‘loginBox‘);
        removeInput(‘registerBox‘);
    }  

    $.getScript(‘http://static.m1905.cn/passport/js/emailsuggest.js‘,function(){
        var arr = [ ‘163.com‘,
                    ‘126.com‘,
                    ‘qq.com‘,
                    ‘yahoo.com.cn‘,
                    ‘gmail.com‘,
                    ‘sohu.com‘,
                    ‘hotmail.com‘ ,
                    ‘sina.com‘
                  ];
        new $.ui.EmailSuggest( ‘#mail_reg‘, {
            data : arr
        });
        new $.ui.EmailSuggest( ‘#mail_sug‘, {
            data : arr
        });
    })

    var validateAPI = ‘http://passport.1905.com/v2/api/‘,
        passBoxTag = $(‘<span class="msg-box"><i class="icons pass"><em class="arr"></em></i></span>‘),
        failBoxTag = $(‘.registerBox .error‘);
    var InterValObj; //timer变量,控制时间
    var count = 60; //间隔函数,1秒执行
    var curCount;//当前剩余秒数

    $.register = {};
    $.register = { 

        rEmail : /^\w+((\.\w+)|(-\w+))*\@[a-zA-Z0-9]+((\.|-)[a-zA-Z0-9]+)*\.[a-zA-Z0-9]+$/,
        rPhone : /^(^1[3|8]\d{9}$)|(^15[012356789]\d{8}$)|(^14[57]\d{8}$)$/,
        rUsername : /^[\.a-zA-Z0-9_-]{4,30}$/,
        rsmscode : /\d{4}/,
        trim : /\s*/,
        rPassword : {
            digital: /\d+/,
            lowercase: /[a-z]+/,
            uppercase: /[A-Z]+/,
            symbols: /[[email protected]#\$%\^&\*\(\)\\\|\/\?\.\<\>‘"\{\}\[\]=\-\~\,\;\:]+/,
            password: /^[[email protected]#\$%\^&\*\(\)\\\|\/\?\.\<\>‘"\{\}\[\]=\-\~\,\;\:\s]+$/,
            mobile_verify: /^\d$/
        },
        checkEmailorPhone : function (){  //验证邮箱手机号
            var flag = "";
            $(‘.registerBox .error‘).html("");
            $(‘.registerBox .emailormobile‘).next(‘.msg-box‘).remove();
            if($(‘.ecope_emailsuggest li.current‘).length > 0){
                EmailorPhoneValue = $(‘.ecope_emailsuggest li.current‘).text();
                $(‘.registerBox .emailormobile‘).val(EmailorPhoneValue);
                $(‘.ecope_emailsuggest li.current‘).removeClass(‘current‘);
            }else{
                EmailorPhoneValue = $(‘.registerBox .emailormobile‘).val();
            }
            $(‘.registerBox .emailormobile‘).removeAttr(‘data-type‘);
            if(!$.register.rEmail.test(EmailorPhoneValue) && !$.register.rPhone.test(EmailorPhoneValue)){
                if(/\s+/.test(EmailorPhoneValue)){
                    failBoxTag.html(‘<em class="icons fail"></em>输入框存在空格,请您重新输入‘);
                }else{
                    failBoxTag.html(‘<em class="icons fail"></em>请输入正确的手机号或邮箱‘);
                    flag = 0;
                }
            }else if($.register.rPhone.test(EmailorPhoneValue)){
                $.ajax({
                    url:validateAPI,
                    data : {m : ‘user‘,a : ‘checkEmailOrmobile‘ , format : ‘json‘,emailormobile : EmailorPhoneValue},
                    dataType: ‘jsonp‘,
                    jsonpCallback : ‘callback‘,
                    async:false,
                    success:function(data){
                        if(data.status == 200){
                            failBoxTag.html(‘<em class="icons fail"></em>手机号已经被注册,可<a href="javascript:void(0)" class="quick-login">直接登录</a>‘);
                            $(‘.registerBox .password‘).unbind(‘blur‘);
                            $(‘.registerBox .registerCode‘).unbind(‘blur‘);
                        }else{
                            $(‘.registerBox .emailormobile‘).siblings(‘.msg-box‘).remove();
                            passBoxTag.appendTo($(‘.emailormobile‘).parent(‘fieldset‘));
                            $(‘.ecope_emailsuggest‘).hide();
                            $(‘.registerBox .emailormobile‘).attr(‘data-type‘,true);
                            $(‘#smsCode‘).slideDown();
                        }
                    }
                });
            }else if($.register.rEmail.test(EmailorPhoneValue)){
                $(‘#smsCode‘).slideUp();
                $.ajax({
                    url:validateAPI,
                    data : {m : ‘user‘,a : ‘checkEmailOrmobile‘ , format : ‘json‘,emailormobile : EmailorPhoneValue},
                    dataType: ‘jsonp‘,
                    jsonpCallback : ‘callback‘,
                    async:false,
                    success:function(data){
                        if(data.status == 200){
                            failBoxTag.html(‘<em class="icons fail"></em>邮箱已经被注册,可<a href="javascript:void(0)" class="quick-login">直接登录</a>‘);
                            $(‘.registerBox .password‘).unbind(‘blur‘);
                            $(‘.registerBox .registerCode‘).unbind(‘blur‘);
                        }else{
                            $(‘.registerBox .emailormobile‘).siblings(‘.msg-box‘).remove();
                            passBoxTag.appendTo($(‘.emailormobile‘).parent(‘fieldset‘));
                            $(‘.ecope_emailsuggest‘).hide();
                            $(‘.registerBox .emailormobile‘).attr(‘data-type‘,true);
                            mobilecodeValue = $(‘.registerBox .mobilecode‘).val() == ‘‘;
                        }
                    }
                });
            }
        },
        checkPassword : function(){  //验证密码
            $(‘.emailormobile‘).trigger(‘blur‘);
            failBoxTag.html("");
            passwordValue = $(‘.registerBox .password‘).val();
            $(‘.registerBox .password‘).removeAttr(‘data-type‘);
            if(passwordValue.length == 0){
                failBoxTag.html(‘<em class="icons fail"></em>密码不能为空‘);
            }else if(passwordValue.length < 6){
                $(".registerBox .password").trigger(‘keyup‘);
                $(‘.registerBox .password‘).next(‘.msg-box‘).remove();
                failBoxTag.html(‘<em class="icons fail"></em>输入密码至少6位‘);
            }else if(passwordValue.length > 16){
                failBoxTag.html(‘<em class="icons fail"></em>密码不能超过16位‘);
            }else if(/\s+/.test(passwordValue)){
                failBoxTag.html(‘<em class="icons fail"></em>输入框存在空格,请您重新输入‘);
                $(‘.registerBox .password‘).next(‘.msg-box‘).remove();
            }else{
                $(‘.registerBox .password‘).attr(‘data-type‘,true);
            }
        },
        checkPassWord_strong : function(){  //检测密码强度
            passwordValue = $(‘.registerBox .password‘).val();
            var value = $.trim(passwordValue), b = 0, msg ="";
            switch ($.register.rPassword.digital.test(value) && b++, $.register.rPassword.lowercase.test(value) && b++, $.register.rPassword.uppercase.test(value) && b++, $.register.rPassword.symbols.test(value) && b++, b) {
                case 1:
                    msg = ‘<i class="icons safe week"> 弱 </i>‘;
                    break;
                case 2:
                    msg = ‘<i class="icons safe normal"> 中 </i>‘;
                    break;
                case 3:
                    msg = ‘<i class="icons safe strong"> 强 </i>‘;
                    break;
            }
            $(‘.registerBox .password‘).siblings(‘.msg-box‘).remove();
            $(‘<span class="msg-box">‘+ msg +‘</span>‘).appendTo($(‘.registerBox .password‘).parent(‘fieldset‘));
            return ‘‘;
        },
        changeverify : function(imgID){  //刷新图片验证码
            var url = ‘http://passport.1905.com/v2/api/?m=seccodech&a=display&rand=‘;
            $(‘#‘+imgID).attr(‘src‘, url  + new Date().getTime());
        },
        checkSecCode : function(ele){  //图片验证码
            $(‘.emailormobile‘).trigger(‘blur‘);
            $(‘.‘+ele).find(‘.error‘).html("");
            $(‘.‘+ele).find(‘.vcode‘).next(‘.msg-box‘).remove();
            secCodeValue = $(‘.‘+ele).find(‘.vcode‘).val();
            $(‘.‘+ele).find(‘.vcode‘).removeAttr(‘data-type‘);
            $.ajax({
                url:validateAPI,
                data : {m : ‘user‘,a : ‘checkseccode‘ , format : ‘json‘,seccode : secCodeValue},
                dataType: ‘jsonp‘,
                jsonpCallback : ‘callback‘,
                success:function(data){
                    if(data.status == 200){
                        $(‘.‘+ele).find(‘.vcode‘).siblings(‘.msg-box‘).remove();
                        $(‘<span class="msg-box"><i class="icons pass"><em class="arr"></em></i></span>‘).appendTo($(‘.‘+ele).find(‘.vcode‘).parent(‘fieldset‘));
                        $(‘.registerBox .vcode‘).attr(‘data-type‘,true);
                    }else{
                        $(‘.‘+ele).find(‘.vcode‘).siblings(‘.msg-box‘).remove();
                        $(‘.‘+ele).find(‘.error‘).html(‘<em class="icons fail"></em>验证码错误‘);
                    }
                }
            })
        },
        SetRemainTime : function() {
            if (curCount == 0) {
                window.clearInterval(InterValObj);
                $("#issuedSMS").removeAttr("disabled");
                $("#issuedSMS").val("重新发送验证码");
                code = "";
            }
            else {
                curCount--;
                $("#issuedSMS").val(curCount + "秒后重新发送");
            }
        },
        getmobileCode : function() {
            curCount = count;
            if(EmailorPhoneValue != "" && $.register.rPhone.test(EmailorPhoneValue)){
                $("#issuedSMS").attr("disabled", "true");
                $("#issuedSMS").val(curCount + "秒后重新发送");
                InterValObj = window.setInterval($.register.SetRemainTime, 1000); //启动计时器,1秒执行一次
                $.ajax({
                    url:validateAPI,
                    data : {m : ‘acode‘,a : ‘sendmobile‘ , mobile : EmailorPhoneValue},
                    dataType: ‘jsonp‘,
                    success:function(data){
                        if(data.status == 200){
                            alert(‘短信已发送‘+data.info);
                        }else{
                            alert(data.info);
                        }
                    }
                })
            }else{
                failBoxTag.html(‘<em class="icons fail"></em>手机号码不能为空‘);
                $(‘.emailormobile‘).trigger(‘focus‘);
            }
        },
        checkSmsCode : function(){//短信验证码
            failBoxTag.html("");
            $(‘.registerBox .mobilecode‘).next(‘.msg-box‘).remove();
            mobilecodeValue = $(‘.registerBox .mobilecode‘).val();
            $(‘.registerBox .mobilecode‘).removeAttr(‘data-type‘);
            if(mobilecodeValue.length == 0){
                failBoxTag.html(‘<em class="icons fail"></em>手机验证码不能为空‘);
                return false;
            }else{
                $.ajax({
                    url:validateAPI,
                    data : {m : ‘acode‘,a : ‘check‘ , mobile : EmailorPhoneValue, acode : mobilecodeValue},
                    dataType: ‘jsonp‘,
                    success:function(data){
                        if(data.status == 200){
                            $(‘.registerBox .mobilecode‘).siblings(‘.msg-box‘).remove();
                            passBoxTag.appendTo($(‘.mobilecode‘).parent(‘fieldset‘));
                            $(‘.registerBox .mobilecode‘).attr(‘data-type‘,true);
                        }else{
                            failBoxTag.html(‘<em class="icons fail"></em>手机验证码错误‘);
                        }
                    }
                })
            }
        },
        checkAgreement : function (){//同意协议
            failBoxTag.html("");
            if (!$(‘.agree‘).is(":checked")) {
                $(‘.registerBox .agree‘).removeAttr(‘data-type‘);
                failBoxTag.html(‘<em class="icons fail"></em>同意后才能注册‘);
            }else{
                 $(‘.registerBox .agree‘).attr(‘data-type‘,true);
             }
        }
    }//register end

    $(document).on(‘click‘,‘.quick-login, .mar-login a‘, function(){
        $(‘.tag li‘).eq(0).addClass(‘active‘).siblings(‘li‘).removeClass(‘active‘);
        $(‘.loginBox‘).addClass(‘active‘).siblings(‘.registerBox‘).removeClass(‘active‘);
    }).on(‘click‘,‘#img_reg_code‘, function(){
        $.register.changeverify(‘img_reg_code‘);
    }).on(‘click‘,‘#img_login_code‘, function(){
        $.register.changeverify(‘img_login_code‘);
    }).on(‘click‘,‘.tag li‘, function(){
        var nIndex = $(this).index();
        $(this).addClass(‘active‘).siblings(‘li‘).removeClass(‘active‘);
        $(‘.passContent‘).eq(nIndex).addClass(‘active‘).siblings().removeClass(‘active‘).find(‘input‘).empty();
        $(‘.nav-header‘).eq(nIndex).addClass(‘active‘).siblings(‘.nav-header‘).removeClass(‘active‘);
    }).on(‘click‘,‘#issuedSMS‘,function(){
        $.register.getmobileCode();
    }).on(‘keydown‘,‘.password‘,function(event){
        if ((event.ctrlKey&&event.which==67) || (event.ctrlKey&&event.which==86)) {
            return false;
        }
    }).on(‘keydown‘,‘.loginBox .input‘,function(event){
        if(event.keyCode == 13){
            $(‘.loginBox .submit‘).trigger(‘click‘);
        }
    }).on(‘keydown‘,‘.registerBox .input‘,function(event){
        if(event.keyCode == 13){
            $(‘.registerBox .submit‘).trigger(‘click‘);
        }
    });

    $(".registerBox .emailormobile").blur(function(){
        // var text = $(this).val().toLowerCase();
        // $(this).val(text);
        $.register.checkEmailorPhone();
    });
    $(".registerBox .password").keyup(function(){$.register.checkPassWord_strong();})
    $(".registerBox .password").blur(function(){$.register.checkPassword();})
    $(".registerBox .vcode").blur(function(){$.register.checkSecCode(‘registerBox‘);})
    $(".registerBox .mobilecode").blur(function(){$.register.checkSmsCode();})
    $(‘.registerBox .agree‘).click(function(){ $.register.checkAgreement();})
    $(".loginBox .vcode").blur(function(){$.register.checkSecCode(‘loginBox‘);})

    $(‘.registerBox .submit‘).click(function(){
        var flagTag =0,
            eleLi = $(".registerBox li.normal:visible"),
            eleLilength = eleLi.length;

        eleLi.each(function(){
            if($(this).find("input").eq(0).attr("data-type")){
                flagTag++;
            }else{
                $(this).find("input").eq(0).trigger("blur");
                return false;
            }
        });

        if(eleLilength==flagTag){
            $.ajax({
                url:validateAPI,
                data : {m : ‘user‘,a : ‘register_v2‘ , format : ‘json‘, emailormobile : EmailorPhoneValue, acode : mobilecodeValue , password: passwordValue , seccode:secCodeValue },
                dataType: ‘jsonp‘,
                jsonpCallback : ‘callback‘,
                success:function(data){
                    if(data.status == 200){
                        backUrl = getRequest(‘callback_url‘)  || "http://"+window.location.host;
                        top.location.href = backUrl;
                    }
                }
            })
        }
    });

    $.login = {};
    $.login = {
        errorTimes : $(‘#code_error_max‘).val() || 0,
        def_vcode : ‘请输入验证码‘,
        rPhone : /^(^1[3|8]\d{9}$)|(^15[012356789]\d{8}$)|(^14[57]\d{8}$)$/,
        rUsername : /^[\.a-zA-Z0-9_-]{4,30}$/,
        rEmail : /^\w+((\.\w+)|(-\w+))*\@[a-zA-Z0-9]+((\.|-)[a-zA-Z0-9]+)*\.[a-zA-Z0-9]+$/,
        err_uname : ‘请检查通行证格式‘,
        err_empty : ‘请填写通行证‘,
        err_upass : ‘请输入密码‘,
        err_vcode : ‘验证码不能为空‘,

        init : function(){
            // 验证码
            if( $.login.errorTimes > 3 ) {
                $(‘.seccode‘).val( $.login.def_vcode );
                $(‘.loginBox .vcode‘).show();
            }
        },
        // 验证表单提交数据
        checkForm : function(){
            var value = $(‘.username‘).val();
            var upass = $(‘.loginBox .password‘).val();
            var vcode = $(‘#code‘).val();
            var testVal = value.replace(/[^\x00-\xff]/g, ‘mm‘),
                unLen = testVal.length;
            if (unLen == 0) {//请填写通行证
                $.login.showMsg( $.login.err_empty );
                return false;
            }
            if (!$.login.rPhone.test(testVal) && !$.login.rEmail.test(testVal) && !$.login.rUsername.test(testVal)) {    //  请检查通行证格式
                $.login.showMsg( $.login.err_uname );
                return false;
            } else if( upass.length == 0) {//请输入密码
                $.login.showMsg( $.login.err_upass );
                return false;
            } else if( $.login.errorTimes > 3 ) {
                if( vcode == ‘‘ || vcode == $.login.def_vcode ){
                    $.login.showMsg( $.login.err_vcode );
                    return false;
                }
            }

            $.login.submit( value, upass, vcode );
        },
        // 回调函数
        loginDispose : function( data ){
            if( data.synsrc ){
                //同步登陆
                $.ajax({
                    url:data.synsrc,
                    dataType: ‘jsonp‘,
                    data: {},
                    success: function (data) {
                        backUrl = $.login.getRequest(‘callback_url‘) || window.location.href.replace(/#.*$/,"");
                        var str = /v2\/\?m=user\&a=login$/;
                        if(str.test(backUrl)){
                            location.href = "http://passport.1905.com";
                        }else{
                            location.href = backUrl;
                        }
                    },error:function(){
                        backUrl = $.login.getRequest(‘callback_url‘) || window.location.href.replace(/#.*$/,"");
                        location.href = backUrl;
                    }
                });
            }
        },
        //提交
        submit : function( uname, upass , vcode){
            $.login.go( uname, upass, vcode, $.login.loginDispose );
        },
        // showMsg
        showMsg : function( msg ){
            $(‘.loginBox .error‘).html(‘<em class="icons fail"></em>‘+msg);
        },
        checkUsername : function(){
            if($(‘.ecope_emailsuggest li.current‘).length > 0){
                usernameValue = $(‘.ecope_emailsuggest li.current‘).text();
                $(‘.loginBox .username‘).val(usernameValue);
                $(‘.ecope_emailsuggest li.current‘).removeClass(‘current‘);
            }else{
                usernameValue = $(‘.loginBox .username‘).val();
            }
            //var usernameValue = $(‘.loginBox .username‘).val();
            $.ajax({
                url:validateAPI,
                type: "GET",
                data : {m : ‘user‘,a : ‘checkoncheckEmailOrmobileOrusername‘,login_name : usernameValue},
                dataType: "jsonp",
                success: function(data) {
                    if(data.status == 200){
                        $.login.showMsg(‘账号不存在‘);
                        $(‘.loginBox .username‘).siblings(‘.msg-box‘).remove();
                        return false;
                    }else{
                        $(‘.loginBox .error‘).html(‘‘);
                        $(‘.loginBox .username‘).parent(‘fieldset‘).append(passBoxTag);
                    }
                }
            });
        },
        go : function( username, password, vcode, callback ){//登陆
            var url =  window.location.host.split(".")[0] == "passport" ? "/v2/api/?m=user&a=login" : "http://passport.m1905.com/v2/api/?m=user&a=login";
            $.ajax({
                url: url,
                type: "GET",
                data: {‘username‘:username,‘password‘:password,‘seccode‘:vcode},
                dataType: "jsonp",
                success: function(data) {
                    if(data.status == 200){
                        if(callback){
                            callback(data.data);
                        }
                    }else{
                        //抛出错误
                        $.login.showMsg( data.info );
                        //登陆错误次数超过3次则提示输入验证码
                        if(data.data.error_max > 3 && $(‘.loginsecCode‘).is(‘:hidden‘)){
                            $(‘.loginsecCode‘).show();
                        }
                    }
                }
            });
        },
        getRequest : function(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i"),
            r = window.location.search.substr(1).match(reg);
            return (r!=null)?  unescape(r[2]) : null;
        }
    };
    $(‘.loginBox .username‘).blur(function(){
        $.login.checkUsername();
    });
    $(‘.loginBox .submit‘).click(function(){
        $.login.checkForm();
    });

    function getRequest(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i"),
        r = window.location.search.substr(1).match(reg);
        return (r!=null)?  unescape(r[2]) : null;
    };
    var refer = document.referrer,
        currentUrl = window.location.href.replace(/#.*$/,""),
        backUrl = getRequest(‘callback_url‘) || currentUrl || refer || ‘http://www.1905.com/‘,
        currentUrl = window.location.hash;
    $(document).on(‘click‘, ‘[data-login]‘, function() {
        var p = $(this).data(‘login‘),
        url = encodeURIComponent( backUrl );
        p && ( window.location = ‘http://openapi.passport.m1905.com/Login/Authorize/‘ + p + ‘/?ReturnUrl=‘ + url )
        return false;
    })
})
时间: 2024-08-04 07:08:57

passport.js的相关文章

[转]passport.js学习笔记

概述 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express.Sails等Web框架无缝集成.Passport功能单一,即只能做登录验证,但非常强大,支持本地账号验证和第三方账号登录验证(OAuth和OpenID等),支持大多数Web网站和服务. 官网: http://passportjs.org/ Github: http://github.com/jaredhanson/passport NPM: https://www.npmjs.org/

node的passport.js验证

项目使用的是passport.js(http://passportjs.org/docs),所以对passport这个中间件研究了一番,在本项目中passport同express-session配合使用 其中配置express-sission: app.use(session({ secret: secret, store: store, //数据库存储session, resave: false, saveUninitialized: true, cookie: cookie, key: ke

使用Node.js + MongoDB 构建restful API

很多天前已经翻译了一大半了,今天收收尾~ RESTful API With Node.js + MongoDB Translated By 林凌灵 翻译目的:练练手,同时了解别人的思维方式 原文地址:RESTful API With Node.js + MongoDB 12 Sep 2013 我是一名移动应用开发者,我需要某种后端服务用来频繁地处理用户数据到数据库中.当然,我可以使用后端即服务类的网站(Parse, Backendless, 等等-),(译者:国内比较出名的有Bmob).但自己解

选择适合的Node.js授权认证策略

选择适合的Node.js授权认证策略 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 英文原文:https://stormpath.com/blog/choosing-nodejs-authentication-strategy/ Node.js正在兴起!我从2010年就开始使用Node工作,那个时侯我看着它从一个很小的个人项目成长为一个全功能的.能够让现代开发者用于构建真实.重要的大型应用的主要工具.一个完整的解决方案生态系统如雨后春笋般涌现,既帮

Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解

用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息经过处理之后会保存在cookie.缓存.Session等地方,然后还有一个过期时间,避免每次都要去捞数据库.在node下基本上也是这个思路,这一节的内容会涉及到user模型的加密方式.如何生成一个Json Web Token(JWT).以及在客户端用Angular创建注册和登录页面,在请求需要认证的

MEAN全栈开发 之 用户认证篇

作者:Soaring_Tiger http://blog.csdn.net/Soaring_Tiger/article/details/51418209 本篇将覆盖以下内容(阅读本文需要有一定Express.Mongoose基础): 在 MEAN全栈开发中添加用户认证 在Express中使用Passport模块管理用户认证 在Exrpess中生成JSON Web Tokens(JWT) 实现用户注册与登录 在Angular当中使用 local storage管理用户session 1.1 在ME

MEANJS DOC

Overview Thank you for downloading the MEAN.JS boilerplate! This simple documentation will cover the basics of developing your MEAN application. Before you begin we recommend you read about the basic building blocks that assemble a MEAN.JS applicatio

Node with React: Fullstack Web Development 课程手记(二)——Google OAuth

OAuth OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.常见的采用微信.QQ.微博.Facebook.Google账号登陆网站的过程都是采用了OAuth技术.这一章我们会以使用Google账号登陆第三方网站为例,展示如何使用这项技术. Google OAuth工作流程 整个OAuth过程主要设计三个方面,客户端(对于网站而言则是浏览器).第三方服务器(对应网站的服务器)和Google服务器.当用户点击使用Google账号登陆网

koa使用koa-passport实现路由进入前登录验证

现在的项目需求很简单,当进入一个页面的时候,如果没登录,则跳转到登录页面,如果登录了则直接到对应页面. koa2写的项目,使用koa-passport,koa-session,根据koa-passport的 isAuthenticated()来判断是否登录. 这篇文章写的很好:===>https://segmentfault.com/a/1190000011557953 我的其中一个路由代码:controllers: exports.renderUserList = async (ctx, ne