diff --git a/apps/passport/controllers/back.js b/apps/passport/controllers/back.js
index 1ee7926..5d614ed 100644
--- a/apps/passport/controllers/back.js
+++ b/apps/passport/controllers/back.js
@@ -10,6 +10,7 @@ const helpers = require(`${library}/helpers`);
 
 const service = require('../models/back-service');
 const sessionService = require('../models/session-service');
+const passportHelper = require('../models/passport-helper');
 
 // 本地地址 localhost
 helpers.urlFormat = helpers.fakeUrlFormat;
@@ -30,17 +31,19 @@ module.exports.indexPage = (req, res, next) => {
 /**
  * 校验用户输入信息,是否是已经注册的用户
  */
-module.exports.validateUserInputAPI = (req, res, next) => {
+module.exports.validateInputAPI = (req, res, next) => {
     let userInput = req.body.phoneNum || '';
 
-    let areaCode = req.body.area || '86';
+    let areaCode = (req.body.area || '86').replace('+', '');
 
     service.validateEmailOrMobileAsync(userInput, areaCode)
         .then(result => {
             req.inputInfo = result;
+            console.log(result);
             next();
         })
         .catch(err => {
+            console.log(err);
             res.json({
                 code: 400,
                 message: err
@@ -48,6 +51,26 @@ module.exports.validateUserInputAPI = (req, res, next) => {
         });
 };
 
+/**
+ * 校验用户输入信息,是否是已经注册的用户
+ */
+module.exports.validateInputPage = (req, res, next) => {
+    let userInput = req.body.phoneNum || '';
+
+    let areaCode = (req.body.area || '86').replace('+', '');
+
+    console.log(userInput, areaCode);
+
+    service.validateEmailOrMobileAsync(userInput, areaCode)
+        .then(result => {
+            req.inputInfo = result;
+            next();
+        })
+        .catch(()=> {
+            res.redirect('/passport/back/index.html');
+        });
+};
+
 module.exports.getUserInfoAPI = (req, res, next) => {
     let inputInfo = req.inputInfo;
 
@@ -57,55 +80,100 @@ module.exports.getUserInfoAPI = (req, res, next) => {
         }).catch(next);
 };
 
-module.exports.sendCodeAPI = (req, res, next) => {
+module.exports.sendCodePage = (req, res, next) => {
     let inputInfo = req.inputInfo;
 
-    service.sendCodeToUserAsync(inputInfo.type, inputInfo.mobile, inputInfo.area).then(result => {
-        switch (inputInfo.type) {
-            case 'email':
-            {
-                res.redirect('/passport/back/sendEmail.html');
-                break;
-            }
-            case 'mobile':
-            {
-                res.redirect('/passport/back/verification.html');
-                break;
-            }
-            default:
-            {
-                res.redirect('/passport/back/index.html');
-            }
+    service.sendCodeToUserAsync(inputInfo.type, inputInfo.phone, inputInfo.area).then(result => {
+        if (_.isEmpty(result)) {
+            res.redirect('/passport/back/index.html');
+        } else {
+            next();
         }
-    }).catch(next);
-};
 
-module.exports.sendBackMobileAPI = (req, res, next) => {
-    let mobile = req.param('mobile', '');
+    }).catch(() => {
+        res.redirect('/passport/back/index.html');
+    });
+};
 
-    let area = req.param('area', '86');
+module.exports.saveInSession = (req, res) => {
+    switch (req.inputInfo.type) {
+        case 'email':
+        {
+            req.session.email = req.inputInfo.phone;
+            res.redirect('/passport/back/sendEmail.html');
+            break;
+        }
+        case 'mobile':
+        {
+            req.session.mobile = req.inputInfo.phone;
+            req.session.area = req.inputInfo.area;
+            res.redirect('/passport/back/verification.html');
+            break;
+        }
+        default:
+        {
+            res.redirect('/passport/back/index.html');
+        }
+    }
+};
 
+module.exports.sendBackMobileAPI = (req, res, next) => {
     service.sendCodeToMobileAsync(area, mobile)
         .then(result => {
             res.json(result);
         }).catch(next);
 };
 
+module.exports.validateMobileAPI = (req, res, next) => {
+    let mobile = req.body.mobile || '';
+
+    let area = req.body.area || '86';
+
+    const ERR = {code: 400, message: '验证失败'};
+
+    if (!helpers.verifyAreaMobile(helpers.makeAreaMobile(area, mobile))) {
+        res.json(ERR);
+    } else {
+        next();
+    }
+};
+
+module.exports.validateEmailInSession = (req, res, next) => {
+    let email = req.session.email || '';
+
+    if (!email) {
+        res.redirect('/passport/back/index.html');
+    }
+
+    const mapperEmailISP = {
+        'yoho.cn': 'http://smail.yoho.cn'
+    };
+
+    let isp = email.split('@')[1];
+
+    req.body.emailUrl = mapperEmailISP[isp] || `http://mail.${isp}`;
+    next();
+};
+
 module.exports.sendEmailPage = (req, res, next) => {
-    service.getSendEmailPageDataAsync()
+    passportHelper.getLeftBannerAsync()
         .then(result => {
             res.render('back/send-email', Object.assign({
-                    module: 'passport',
-                    page: 'back-send-email-ok',
-                    title: "邮件发送成功"
-                }, result
-            ));
+                module: 'passport',
+                page: 'back-send-email-ok',
+                title: "邮件发送成功"
+            }, {
+                email: req.body.emailUrl
+            }, {
+                coverHref: result.url,
+                coverImg: result.img
+            }));
         }).catch(next);
 
 };
 
-module.exports.checkCodePage = (req, res, next) => {
-    let code = req.param('code', '');
+module.exports.verifyCodeByEmailPage = (req, res, next) => {
+    let code = req.query.code || '';
 
     service.checkEmailCodeAsync(code)
         .then(result => {
@@ -118,17 +186,22 @@ module.exports.checkCodePage = (req, res, next) => {
 };
 
 module.exports.resetPasswordPage = (req, res, next) => {
-    let code = res.query.code || '';
+    let code = req.query.code || '';
 
-    service.getLeftBannerAsync()
+    passportHelper.getLeftBannerAsync()
         .then(result => {
             res.render('back/reset-pwd', Object.assign({
                 module: 'passport',
                 page: 'back-reset-pwd',
-                title:'重新设置密码'
+                title: '重新设置密码'
             }, {
                 code: code
-            }, result))
+            }, {
+                resetPwd: {
+                    coverHref: result.url,
+                    coverImg: result.img
+                }
+            }))
         }).catch(next);
 };
 
@@ -137,19 +210,20 @@ module.exports.resetPasswordPage = (req, res, next) => {
  */
 module.exports.verifyCodeByMobilePage = (req, res, next) => {
 
-    service.getVerifyCodeByMobilePageDataAsync()
+    passportHelper.getLeftBannerAsync()
         .then(result => {
             res.render('back/verification', Object.assign({
                 module: 'passport',
                 page: 'back-verify-mobile-code',
                 title: '手机验证'
             }, {
+                mobile: req.body.mobile,
+                area: req.body.area,
+                verifyCode: req.body.verifyCode
+            }, {
                 verification: {
                     coverHref: result.url,
-                    coverImg: result.img,
-                    mobile: result.mobile,
-                    area: result.area,
-                    verifyCode: result.verifyCode
+                    coverImg: result.img
                 }
             }));
         }).catch(next);
@@ -160,10 +234,10 @@ module.exports.verifyCodeByMobileAPI = (req, res, next) => {
 };
 
 module.exports.checkSuccessStatusPage = (req, res, next) => {
-    let successType = sessionService.get('successType', '');
+    let successType = req.session.successType || '';
 
     if (successType) {
-        sessionService.set('successType', '');
+        delete req.session.successType;
         next();
     } else {
         res.redirect('/passport/back/index.html');
@@ -171,17 +245,22 @@ module.exports.checkSuccessStatusPage = (req, res, next) => {
 };
 
 module.exports.resetPwdSuccessPage = (req, res, next) => {
-    service.getLeftBannerAsync()
+    passportHelper.getLeftBannerAsync()
         .then(result => {
-            res.render('back/email-reset-success', Object.assign({
+            res.render('back/reset-success', Object.assign({
                 module: 'passport',
-                page: 'back-reset-success',
+                page: 'back-index',
                 title: '重置密码成功'
-            }, result))
+            }, {
+                resetSuccess: {
+                    coverHref: result.url,
+                    coverImg: result.img
+                }
+            }))
         }).catch(next);
 };
 
-module.exports.verifyCodyByMobileAPI = (req, res, next) => {
+module.exports.verifyCodeByMobileAPI = (req, res, next) => {
 
     let mobile = req.param('mobile', '');
 
@@ -210,18 +289,31 @@ module.exports.tokenCheckPage = (req, res, next) => {
 };
 
 module.exports.validationPwdPage = (req, res, next) => {
-    let pwd = req.param('pwd', '');
+    let pwd = req.body.pwd || '';
 
-    if (helpers.verifyPassword(pwd)) {
-        res.redirect('/passport/back/index.html');
-    } else {
+    if (helpers.isPassword(pwd)) {
         next();
+    } else {
+        res.redirect('/passport/back/index.html');
     }
 };
 
 module.exports.updatePwdPage = (req, res, next) => {
 
-    let code = req.param('code', '');
-
+    let code = req.body.code || '';
     let auth = req.authInfo;
+
+
+};
+
+module.exports.validateMobileInSession = (req, res, next) => {
+    req.body.mobile = req.session.mobile || "";
+    req.body.verifyCode = req.session.verifyCode || "";
+    req.body.area = req.session.area || "";
+
+    if (req.body.mobile && req.body.verifyCode) {
+        next()
+    } else {
+        res.redirect('/passport/back/index.html');
+    }
 };
diff --git a/apps/passport/controllers/captcha.js b/apps/passport/controllers/captcha.js
index 85b5ee0..3f4c476 100644
--- a/apps/passport/controllers/captcha.js
+++ b/apps/passport/controllers/captcha.js
@@ -10,7 +10,7 @@ const sessionService = require('../models/session-service');
 const captcha = require('../models/captcha-service')(sessionService);
 const helpers = require(library + '/helpers');
 
-exports.checkAPI = (req, res, next) => {
+exports.validateAPI = (req, res, next) => {
     let captchaToken = req.body.verifyCode || '';
 
     captcha.findByContentAsync(captchaToken)
@@ -26,7 +26,7 @@ exports.checkAPI = (req, res, next) => {
         });
 };
 
-exports.checkPage = (req, res, next) => {
+exports.validatePage = (req, res, next) => {
     let captchaToken = req.body.verifyCode || '';
 
     captcha.findByContentAsync(captchaToken)
diff --git a/apps/passport/models/back-service.js b/apps/passport/models/back-service.js
index 6472c47..202a474 100644
--- a/apps/passport/models/back-service.js
+++ b/apps/passport/models/back-service.js
@@ -12,7 +12,6 @@ const _ = require('lodash');
 const moment = require('moment');
 
 const userService = require('./user-service');
-const sessionService = require('./session-service');
 const passportHelper = require('./passport-helper');
 
 const BACK_LEFT_BANNER_CODE = '3bbaf502c447a2ddad60879042e286d8'; //找回密码左边的banner
@@ -22,7 +21,6 @@ module.exports.validateEmailOrMobileAsync = (userInput, areaCode) => {
         let result = {type: 'email', area: '', phone: ''};
 
         if (helpers.verifyEmail(userInput)) {
-
             result.type = 'email';
             result.area = '';
             result.phone = userInput;
@@ -108,12 +106,6 @@ module.exports.sendCodeToUserAsync = (type, mobile, areaCode) => {
  * 发送找回手机号短信
  */
 module.exports.sendCodeToMobileAsync = (areaCode, mobile) => {
-    const ERR = {code: 400, message: '验证失败'};
-
-    if (!helpers.verifyAreaMobile(helpers.makeAreaMobile(areaCode, mobile))) {
-        return ERR;
-    }
-
     return api.sendCodeToMobileAsync(mobile, areaCode);
 };
 
@@ -143,7 +135,14 @@ module.exports.indexPageDataAsync = () => {
 };
 
 module.exports.getVerifyCodeByMobilePageDataAsync = () => {
-
+    return co(function * () {
+        return {
+            verification: {
+                coverHref: '',
+                coverImg: ''
+            }
+        }
+    })();
 };
 
 module.exports.getSendEmailPageDataAsync = () => {
diff --git a/apps/passport/models/passport-helper.js b/apps/passport/models/passport-helper.js
index 891cc2b..e565788 100644
--- a/apps/passport/models/passport-helper.js
+++ b/apps/passport/models/passport-helper.js
@@ -5,7 +5,6 @@
 
 'use strict';
 
-const Cache = require(library + '/cache');
 const helpers = require(library + '/helpers');
 const Promise = require('bluebird');
 const co = Promise.coroutine;
diff --git a/apps/passport/models/session-service.js b/apps/passport/models/session-service.js
index 0c012a7..61ed672 100644
--- a/apps/passport/models/session-service.js
+++ b/apps/passport/models/session-service.js
@@ -15,3 +15,5 @@ module.exports.findCaptchaByTokenAsync = (token) => {
         }
     })();
 };
+
+
diff --git a/apps/passport/router.js b/apps/passport/router.js
index 68ff602..e927573 100644
--- a/apps/passport/router.js
+++ b/apps/passport/router.js
@@ -25,34 +25,37 @@ router.get('/login/wechat/callback', login.wechat.callback);
 router.get('/back/index.html', Back.indexPage);
 
 // 实时验证输入是否正确
-router.post('/back/authcode', Captcha.checkAPI, Back.validateUserInputAPI, Back.getUserInfoAPI);
+router.post('/back/authcode', Captcha.validateAPI, Back.validateInputAPI, Back.getUserInfoAPI);
 
-// 提交按钮确定
-router.post('/back/mobile', Captcha.checkPage, Back.validateUserInputAPI, Back.sendCodeAPI);
+// 提交按钮邮件API
+router.post('/back/email', Captcha.validatePage, Back.validateInputPage, Back.sendCodePage, Back.saveInSession);
+
+// 提交按钮手机API
+router.post('/back/mobile', Captcha.validatePage, Back.validateInputPage, Back.sendCodePage, Back.saveInSession);
 
 /**
  * 邮件找回密码
  */
 // 发送邮件成功页面
-router.get('/back/sendEmail.html', Back.sendEmailPage);
+router.get('/back/sendEmail.html', Back.validateEmailInSession, Back.sendEmailPage);
 
 /**
  * 短信找回密码
  */
 // 验证手机短信页面
-router.get('/back/verification.html', Back.verifyCodeByMobilePage);
+router.get('/back/verification.html', Back.validateMobileInSession, Captcha.validatePage, Back.verifyCodeByMobilePage);
 
 // 重新发送短信接口
-router.post('/back/sendBackMobile', Captcha.checkAPI, Back.sendBackMobileAPI);
+router.post('/back/sendBackMobile', Captcha.validateAPI, Back.validateMobileAPI, Back.sendBackMobileAPI);
 
 // 验证手机验证码接口
-router.post('/back/backMobile', Captcha.checkAPI, Back.verifyCodyByMobileAPI);
+router.post('/back/backMobile', Captcha.validateAPI, Back.verifyCodeByMobileAPI);
 
 /**
  * 重置密码
  */
 // 重置密码页面
-router.get('/back/backcode', Back.tokenCheckPage, Back.checkCodePage, Back.resetPasswordPage);
+router.get('/back/backcode', Back.tokenCheckPage, Back.verifyCodeByEmailPage, Back.resetPasswordPage);
 
 // 重置密码接口
 router.post('/back/update', Back.tokenCheckPage, Back.validationPwdPage, Back.updatePwdPage);
diff --git a/apps/passport/views/action/back/reset-success.hbs b/apps/passport/views/action/back/reset-success.hbs
index 1f1f02e..ca0d71e 100644
--- a/apps/passport/views/action/back/reset-success.hbs
+++ b/apps/passport/views/action/back/reset-success.hbs
@@ -9,7 +9,6 @@
         </div>
     {{/ resetSuccess}}
 </div>
-{{> layout/footer}}
 <script type="text/javascript">
     (function() {
         var count = 5,
diff --git a/library/helpers.js b/library/helpers.js
index a5002dc..e4f0345 100644
--- a/library/helpers.js
+++ b/library/helpers.js
@@ -319,3 +319,14 @@ exports.makeAreaMobile = (area, mobile) => {
 
     return `${area}-${mobile}`;
 };
+
+exports.isPassword = (pwd) => {
+    if(!pwd){
+        return false;
+    }
+
+    // TODO
+    let pwdRegexp = /^([a-zA-Z0-9\-\+_!@\#$%\^&\*\(\)\:\;\.=\[\]\\\',\?]){6,20}$/;
+
+    return pwdRegexp.test(_.trim(pwd));
+};
diff --git a/public/js/passport/back-index.page.js b/public/js/passport/back-index.page.js
index cfd6ec2..ad52ef8 100644
--- a/public/js/passport/back-index.page.js
+++ b/public/js/passport/back-index.page.js
@@ -3,4 +3,3 @@
  */
 
 require('./back/back');
-require('./')
diff --git a/public/js/passport/back-reset-pwd.page.js b/public/js/passport/back-reset-pwd.page.js
index fb5a4cb..9eb28de 100644
--- a/public/js/passport/back-reset-pwd.page.js
+++ b/public/js/passport/back-reset-pwd.page.js
@@ -1,3 +1,5 @@
 /**
  * Created by TaoHuang on 2016/6/21.
  */
+
+require('./back/reset');