$(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 = ; //间隔函数,1秒执行
var curCount;//当前剩余秒数 $.register = {};
$.register = { rEmail : /^\w+((\.\w+)|(-\w+))*\@[a-zA-Z0-]+((\.|-)[a-zA-Z0-]+)*\.[a-zA-Z0-]+$/,
rPhone : /^(^[|]\d{}$)|(^[]\d{}$)|(^[]\d{}$)$/,
rUsername : /^[\.a-zA-Z0-9_-]{,}$/,
rsmscode : /\d{}/,
trim : /\s*/,
rPassword : {
digital: /\d+/,
lowercase: /[a-z]+/,
uppercase: /[A-Z]+/,
symbols: /[_!@#\$%\^&\*\(\)\\\|\/\?\.\<\>'"\{\}\[\]=\-\~\,\;\:]+/,
password: /^[a-zA-Z0-9_!@#\$%\^&\*\(\)\\\|\/\?\.\<\>'"\{\}\[\]=\-\~\,\;\:\s]+$/,
mobile_verify: /^\d$/
},
checkEmailorPhone : function (){ //验证邮箱手机号
var flag = "";
$('.registerBox .error').html("");
$('.registerBox .emailormobile').next('.msg-box').remove();
if($('.ecope_emailsuggest li.current').length > ){
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 = ;
}
}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 == ){
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 == ){
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 == ){
failBoxTag.html('<em class="icons fail"></em>密码不能为空');
}else if(passwordValue.length < ){
$(".registerBox .password").trigger('keyup');
$('.registerBox .password').next('.msg-box').remove();
failBoxTag.html('<em class="icons fail"></em>输入密码至少6位');
}else if(passwordValue.length > ){
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 = , 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 :
msg = '<i class="icons safe week"> 弱 </i>';
break;
case :
msg = '<i class="icons safe normal"> 中 </i>';
break;
case :
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 == ){
$('.'+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 == ) {
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, ); //启动计时器,1秒执行一次
$.ajax({
url:validateAPI,
data : {m : 'acode',a : 'sendmobile' , mobile : EmailorPhoneValue},
dataType: 'jsonp',
success:function(data){
if(data.status == ){
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 == ){
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 == ){
$('.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().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==) || (event.ctrlKey&&event.which==)) {
return false;
}
}).on('keydown','.loginBox .input',function(event){
if(event.keyCode == ){
$('.loginBox .submit').trigger('click');
}
}).on('keydown','.registerBox .input',function(event){
if(event.keyCode == ){
$('.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 =,
eleLi = $(".registerBox li.normal:visible"),
eleLilength = eleLi.length; eleLi.each(function(){
if($(this).find("input").eq().attr("data-type")){
flagTag++;
}else{
$(this).find("input").eq().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 == ){
backUrl = getRequest('callback_url') || "http://"+window.location.host;
top.location.href = backUrl;
}
}
})
}
}); $.login = {};
$.login = {
errorTimes : $('#code_error_max').val() || ,
def_vcode : '请输入验证码',
rPhone : /^(^[|]\d{}$)|(^[]\d{}$)|(^[]\d{}$)$/,
rUsername : /^[\.a-zA-Z0-9_-]{,}$/,
rEmail : /^\w+((\.\w+)|(-\w+))*\@[a-zA-Z0-]+((\.|-)[a-zA-Z0-]+)*\.[a-zA-Z0-]+$/,
err_uname : '请检查通行证格式',
err_empty : '请填写通行证',
err_upass : '请输入密码',
err_vcode : '验证码不能为空', init : function(){
// 验证码
if( $.login.errorTimes > ) {
$('.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 == ) {//请填写通行证
$.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 == ) {//请输入密码
$.login.showMsg( $.login.err_upass );
return false;
} else if( $.login.errorTimes > ) {
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 > ){
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 == ){
$.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(".")[] == "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 == ){
if(callback){
callback(data.data);
}
}else{
//抛出错误
$.login.showMsg( data.info );
//登陆错误次数超过3次则提示输入验证码
if(data.data.error_max > && $('.loginsecCode').is(':hidden')){
$('.loginsecCode').show();
}
}
}
});
},
getRequest : function(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i"),
r = window.location.search.substr().match(reg);
return (r!=null)? unescape(r[]) : 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().match(reg);
return (r!=null)? unescape(r[]) : 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;
})
})

passport.js的更多相关文章

  1. [转]passport.js学习笔记

    概述 passport.js是Nodejs中的一个做登录验证的中间件,极其灵活和模块化,并且可与Express.Sails等Web框架无缝集成.Passport功能单一,即只能做登录验证,但非常强大, ...

  2. node的passport.js验证

    项目使用的是passport.js(http://passportjs.org/docs),所以对passport这个中间件研究了一番,在本项目中passport同express-session配合使 ...

  3. nodeJS---express4+passport实现用户注册登录验证

    网上有很多关于passport模块使用方法的介绍,不过基本上都是基于express3的,本文介绍在express4框架中使用passport模块. 前言 passport是一个功能单一,但非常强大的一 ...

  4. Node.js建站笔记-使用react和react-router取代Backbone

    斟酌之后,决定在<嗨猫>项目中引入react,整体项目偏重spa模式,舍弃部分server端的模板渲染,将一部分渲染工作交给前端react实现. react拥有丰富的组件,虽然不如Back ...

  5. 合并js文件minify实例

    将min目录放入项目中后,js中引入方式是: <script type="text/javascript" src="__PUBLIC__/min/?b=publi ...

  6. 关于 Node.js 的认证方面的教程(很可能)是有误的

    原文地址:Your Node.js authentication tutorial is (probably) wrong 我搜索了大量关于 Node.js/Express.js 认证的教程.所有这些 ...

  7. 网站注册与登录使用 bcrypt与 passport 双重验证 解释

    网站在登录前,需要进行注册收集用户基本信息,bcrypt 提供密码加密验证的方法,但是使用不正确,会给初学者带来各种问题. bcrypt 的安装: npm i bcrypt 经过测试,经常安装不成功, ...

  8. koa 项目实战(九)passport验证token

    1.安装模块 npm install koa-passport -D npm install passport-jwt -D 2.解析token 根目录/config/passport.js cons ...

  9. 【Azure 应用服务】NodeJS Express + MSAL 实现API应用Token认证(AAD OAuth2 idToken)的认证实验 -- passport.authenticate('oauth-bearer', {session: false})

    问题描述 在前两篇博文中,对NodeJS Express应用 使用MSAL + AAD实现用户登录并获取用户信息,获取Authorization信息 ( ID Token, Access Token) ...

随机推荐

  1. spring的组成

    ① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能 SpringContext:ApplicationContext,扩展核心容器,提供 ...

  2. Android:ViewPager适配器PagerAdapter的使用

    PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承Pag ...

  3. Ubuntu 学习笔记

    1.   ubuntu开启root账号,设置分配很简单,只要为root设置一个root密码就行了: $ sudo passwd root 之后会提示要输入root用户的密码,连续输入root密码,再使 ...

  4. android下升级软件介绍

    编译android: 生成:system.img,ramdisk.img,userdata.img映像文件. ramdisk.img是emulator的文件系统 system.img包括了主要的包.库 ...

  5. allegro添加多个过孔

    place--Via arrays matrix: [数] 矩阵:模型:[生物][地质] 基质:母体:子宫:[地质] 脉石 boundary:边界:范围:分界线 unplaced : adj. 未受到 ...

  6. Hadoop集群安装配置教程_Hadoop2.6.0_Ubuntu/CentOS

    摘自:http://www.powerxing.com/install-hadoop-cluster/ 本教程讲述如何配置 Hadoop 集群,默认读者已经掌握了 Hadoop 的单机伪分布式配置,否 ...

  7. 【 D3.js 高级系列 — 1.0 】 文本的换行

    在 SVG 中添加文本是使用 text 元素.但是,这个元素不能够自动换行,超出的部分就显示不出来了,怎么办呢? 高级系列开篇前言 从今天开始写高级系列教程.还是那句话,由于本人实力有限,不一定保证入 ...

  8. 在 Azure 中使用公用 IP 创建多 NIC VM

    Russ Slaten  2014年 11 月 18日下午 4点 我们最近宣布了支持具有多个网络接口控制器 (NIC) 的虚拟机 (VM).我仍在努力了解此功能适用的所有新场景,但首先,我希望亲自测试 ...

  9. Android MVP架构分析

    App架构在Android开发者中一直是讨论比较多的一个话题,目前讨论较多的有MVP.MVVM.Clean这三种.google官方对于架构的态度一直是非常开放的,让开发者自主选择组织和架构app的方式 ...

  10. Ruby准备工作

    解释性语言,自上而下执行,纯面向对象,跨平台,动态绑定,没有多重继承.NetBeans sun公司开发irb指令可快速实时输入并返回结果 quit 或者exitrdoc hello.rb 生成html ...