ÌṩÓû§µÇ¼ÒÔ¼°Î¬»¤Óû§µÄµÇ¼״̬£¬ÊÇÒ»¸öÓµÓÐÓû§ÏµÍ³µÄÈí¼þÓ¦ÓÃÆÕ±éÐèÒª×öµÄÊÂÇé¡£Ïñ΢ÐÅÕâÑùµÄÒ»¸öÉ罻ƽ̨£¬Èç¹û×öÒ»¸öС³ÌÐòÓ¦Óã¬ÎÒÃÇ¿ÉÄܺÜÉÙ»áÈ¥×öÒ»¸öÍêÈ«ÍÑÀëºÍÉáÆúÁ¬½ÓÓû§ÐÅÏ¢µÄ´¿¹¤¾ßÈí¼þ¡£
ÈÃÓû§µÇ¼£¬±êʶÓû§ºÍ»ñÈ¡Óû§ÐÅÏ¢£¬ÒÔÓû§ÎªºËÐÄÌṩ·þÎñ£¬ÊǴ󲿷ÖС³ÌÐò¶¼»á×öµÄÊÂÇé¡£ÎÒÃǽñÌì¾ÍÀ´Á˽âÏÂÔÚС³ÌÐòÖУ¬ÈçºÎ×öÓû§µÇ¼£¬ÒÔ¼°ÈçºÎȥά»¤Õâ¸öµÇ¼ºóµÄ»á»°£¨Session£©×´Ì¬¡£
ÔÚ΢ÐÅС³ÌÐòÖУ¬ÎÒÃÇ´óÖ»áÉæ¼°µ½ÒÔÏÂÈýÀàµÇ¼·½Ê½£º
1.×ÔÓеÄÕ˺Å×¢²áºÍµÇ¼£»
2.ʹÓÃÆäËûµÚÈý·½Æ½Ì¨Õ˺ŵǼ£»
3.ʹÓÃ΢ÐÅÕ˺ŵǼ£¨¼´Ö±½ÓʹÓõ±Ç°ÒѵǼµÄ΢ÐÅÕ˺ÅÀ´×÷ΪС³ÌÐòµÄÓû§½øÐеǼ£©¡£
µÚÒ»ºÍµÚ¶þÖÖ·½Ê½ÊÇĿǰWebÓ¦ÓÃÖÐ×î³£¼ûµÄÁ½ÖÖ·½Ê½£¬ÔÚ΢ÐÅС³ÌÐòÖÐͬÑù¿ÉÒÔʹÓ㬵«ÊÇÐèÒªÖµµÄ×¢ÒâµÄÊÇ£¬Ð¡³ÌÐòÖÐûÓÐCookieµÄ»úÖÆ£¬ËùÒÔÔÚʹÓÃÕâ2ÖÖ·½Ê½Ç°£¬ÇëÈ·ÈÏÄãÃÇ»òµÚÈý·½µÄAPIÊÇ·ñÐèÒªÒÀÀµCookie£»»¹ÓÐС³ÌÐòÖÐÒ²²»Ö§³ÖHTMLÒ³Ãæ£¬ÄÇЩÐèҪʹÓÃÒ³ÃæÖØ¶¨ÏòÀ´½øÐеǼµÄµÚÈý·½API¾ÍÐèÒª¸ÄÔ죬»ò²»ÄÜÓÃÁË¡£
ÎÒÃǽñÌìÖ÷ÒªÀ´ÌÖÂÛһϵÚÈýÖÖ·½Ê½£¬¼´ÈçºÎʹÓÃ΢ÐÅÕ˺ŽøÐеǼ£¬ÒòΪÕâÖÖ·½Ê½ºÍ΢ÐÅÆ½Ì¨½áºÏ×î½ôÃÜ£¬Óû§ÌåÑé±È½ÏºÃ¡£
µÇ¼Á÷³Ì
ÒýÓÃС³ÌÐò¹Ù·½ÎĵµµÄµÇ¼Á÷³Ìͼ£¬Õû¸öµÇ¼Á÷³Ì»ù±¾ÈçÏÂͼËùʾ£º

µÇ¼Á÷³Ìͼ
¸ÃͼÖУ¬¡°Ð¡³ÌÐò¡±Ö¸µÄ¾ÍÊÇÎÒÃÇʹÓÃС³ÌÐò¿ò¼ÜдµÄ´úÂ벿·Ö£¬¡°µÚÈý·½·þÎñÆ÷¡±Ò»°ã¾ÍÊÇÎÒÃÇ×Ô¼ºµÄºǫ́·þÎñ³ÌÐò£¬¡°Î¢ÐÅ·þÎñÆ÷¡±ÊÇ΢ÐŹٷ½µÄAPI·þÎñÆ÷¡£
ÏÂÃæÎÒÃÇÀ´Öð²½·Ö½âÒ»ÏÂÕâ¸öÁ÷³Ìͼ¡£
²½Öè1£ºÔÚ¿Í»§¶Ë»ñÈ¡µ±Ç°µÇ¼΢ÐÅÓû§µÄµÇ¼ƾ֤(code)
ÔÚС³ÌÐòÖеǼµÄµÚÒ»²½£¬¾ÍÊÇÏÈ»ñÈ¡µÇ¼ƾ֤¡£ÎÒÃÇ¿ÉÒÔʹÓÃwx.login()·½·¨²¢µÃµ½Ò»¸öµÇ¼ƾ֤¡£
ÎÒÃÇ¿ÉÒÔÔÚС³ÌÐòµÄApp´úÂëÖз¢ÆðµÇ¼ƾ֤ÇëÇó£¬Ò²¿ÉÒÔÔÚÆäËûÈκÎPageÒ³Ãæ´úÂëÖз¢ÆðµÇ¼ƾ֤ÇëÇó£¬Ö÷Òª¸ù¾ÝÄãС³ÌÐòµÄʵ¼ÊÐèÒª¡£
App({ onLaunch: function() { wx.login({ success: function(res) { var code = res.code; if (code) { console.log('»ñÈ¡Óû§µÇ¼ƾ֤£º' + code); } else { console.log('»ñÈ¡Óû§µÇ¼̬ʧ°Ü£º' + res.errMsg); } } }); } }) |
²½Öè2£º½«µÇ¼ƾ֤·¢ÍùÄãµÄ·þÎñ¶Ë£¬²¢ÔÚÄãµÄ·þÎñ¶ËʹÓÃ¸ÃÆ¾Ö¤Ïò΢ÐÅ·þÎñÆ÷»»È¡¸Ã΢ÐÅÓû§µÄΨһ±êʶ(openid)ºÍ»á»°ÃÜÔ¿(session_key)
Ê×ÏÈ£¬ÎÒÃÇʹÓÃwx.request()·½·¨£¬ÇëÇóÎÒÃÇ×Ô¼ºÊµÏÖµÄÒ»¸öºǫ́API£¬²¢½«µÇ¼ƾ֤£¨code£©Ð¯´ø¹ýÈ¥£¬ÀýÈçÔÚÎÒÃÇÇ°Ãæ´úÂëµÄ»ù´¡ÉÏÔö¼Ó£º
App({ onLaunch: function() { wx.login({ success: function(res) { var code = res.code; if (code) { console.log('»ñÈ¡Óû§µÇ¼ƾ֤£º' + code);
// --------- ·¢ËÍÆ¾Ö¤ ------------------
wx.request({
url: 'https://www.my-domain.com/wx/onlogin',
data: { code: code }
})
// ------------------------------------
} else {
console.log('»ñÈ¡Óû§µÇ¼̬ʧ°Ü£º' + res.errMsg);
}
}
});
}
}) |
ÄãµÄºǫ́·þÎñ(/wx/onlogin)½Ó×ÅÐèҪʹÓÃÕâ¸ö´«µÝ¹ýÀ´µÄµÇ¼ƾ֤£¬È¥µ÷ÓÃ΢ÐŽӿڻ»È¡openidºÍsession_key£¬½Ó¿ÚµØÖ·¸ñʽÈçÏÂËùʾ£º
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code |
ÕâÀïÊÇÎÒʹÓÃÁËNode.js Express¹¹½¨µÄºǫ́·þÎñµÄ´úÂ룬½ö¹©²Î¿¼£º
router.get('/wx/onlogin', function (req, res, next) { let code = req.query.code
request.get({
uri: 'https://api.weixin.qq.com/sns/jscode2session',
json: true,
qs: {
grant_type: 'authorization_code',
appid: 'ÄãС³ÌÐòµÄAPPID',
secret: 'ÄãС³ÌÐòµÄSECRET',
js_code: code
}
}, (err, response, data) => {
if (response.statusCode === 200) {
console.log("[openid]", data.openid)
console.log("[session_key]", data.session_key)
//TODO: Éú³ÉÒ»¸öΨһ×Ö·û´®sessionid×÷Ϊ¼ü£¬½«openidºÍsession_key×÷Ϊֵ£¬´æÈëredis£¬³¬Ê±Ê±¼äÉèÖÃΪ2Сʱ
//α´úÂë: redisStore.set(sessionid, openid + session_key,
7200)
res.json({ sessionid: sessionid })
} else {
console.log("[error]", err)
res.json(err)
}
})
}) |
Õâ¶Îºǫ́´úÂë³É¹¦Ö´Ðеϰ£¬¾Í¿ÉÒԵõ½openidºÍsession_key¡£Õâ¸öÐÅÏ¢¾ÍÊǵ±Ç°Î¢ÐÅÕË»§ÔÚ΢ÐÅ·þÎñÆ÷ÄDZߵĵǼ̬ÁË¡£
µ«ÊÇ£¬ÎªÁ˰²È«·½ÃæµÄÔÒò£¬Çë²»ÒªÖ±½ÓʹÓÃÕâЩÐÅÏ¢×÷ΪÄãС³ÌÐòµÄÓû§±êʶºÍsession±êʶ»Ø´«µ½Ð¡³ÌÐò¿Í»§¶ËÖÐÈ¥£¬ÎÒÃÇÓ¦¸ÃÔÚ·þÎñÆ÷¶Ë×öÒ»²ã×Ô¼ºµÄsession£¬½«Õâ¸ö΢ÐÅÕ˺ŵǼ̬Éú³ÉÒ»¸ösession
id²¢Î¬»¤ÔÚÎÒÃÇ×Ô¼ºµÄsession»úÖÆÖУ¬È»ºó°ÑÕâ¸ösession idÅÉ·¢µ½Ð¡³ÌÐò¿Í»§¶Ë×÷Ϊsession±êʶÀ´Ê¹Óá£
¹ØÓÚÈçºÎÔÚ·þÎñÆ÷¶Ë×öÕâ¸ösession»úÖÆ£¬ÎÒÃÇÏÖÔÚÒ»°ã²ÉÓüüÖµ¶Ô´æ´¢¹¤¾ßÀ´×ö£¬±ÈÈçredis¡£ÎÒÃÇΪÿ¸ösessionÉú³ÉÒ»¸öΨһµÄ×Ö·û´®×÷Ϊ¼ü£¬È»ºó¿ÉÒÔ½«session_keyºÍopenid×÷Ϊֵ£¬´æÈëredisÖУ¬ÎªÁ˰²È«£¬´æÈëµÄʱºò»¹Ó¦ÉèÖÃÒ»¸ö³¬Ê±µÄʱ¼ä¡£
²½Öè3£ºÔÚ¿Í»§¶Ë±£´æSession ID
¿ª·¢WebÓ¦ÓõÄʱºò£¬ÔÚ¿Í»§¶Ë£¨ä¯ÀÀÆ÷£©ÖУ¬ÎÒÃÇͨ³£½«Session ID´æ·ÅÔÚcookieÖУ¬µ«ÊÇС³ÌÐòûÓÐcookie»úÖÆ£¬ËùÒÔ²»ÄܲÉÓÃcookieÁË£¬µ«ÊÇС³ÌÐòÓб¾µØµÄstorage£¬ËùÒÔÎÒÃÇ¿ÉÒÔʹÓÃstorageÀ´±£´æSession
ID£¬ÒÔ¹©ºóÐøµÄºǫ́APIµ÷ÓÃËùʹÓá£
ÔÚÖ®ºó£¬µ÷ÓÃÄÇЩÐèÒªµÇ¼ºó²ÅÓÐȨÏÞ·ÃÎʵĺǫ́·þÎñʱ£¬Äã¿ÉÒÔ½«±£´æÔÚstorageÖеÄSession IDÈ¡³ö²¢Ð¯´øÔÚÇëÇóÖУ¨¿ÉÒÔ·ÅÔÚheaderÖÐЯ´ø£¬Ò²¿ÉÒÔ·ÅÔÚquerystringÖУ¬»òÊÇ·ÅÔÚbodyÖУ¬¸ù¾ÝÄã×Ô¼ºµÄÐèÒªÀ´Ê¹Óã©£¬´«µÝµ½ºǫ́·þÎñ£¬ºǫ́´úÂëÖлñÈ¡µ½¸ÃSession
IDºó£¬´ÓredisÖвéÕÒÊÇ·ñÓиÃSession ID´æÔÚ£¬´æÔڵϰ£¬¼´È·ÈϸÃsessionÊÇÓÐЧµÄ£¬¼ÌÐøºóÐøµÄ´úÂëÖ´ÐУ¬·ñÔò½øÐдíÎó´¦Àí¡£
ÕâÊÇÒ»¸öÐèÒªsessionÑéÖ¤µÄºǫ́·þÎñʾÀý£¬ÎÒµÄSession IDÊÇ·ÅÔÚheaderÖд«µÝµÄ£¬ËùÒÔÔÚÕâ¸öʾÀýÖУ¬ÊÇ´ÓÇëÇóµÄheaderÖлñÈ¡sessionid£º
router.get('/wx/products/list', function (req, res, next) { let sessionid = req.header("sessionid") let sessionVal = redisStore.get(sessionid)
if (sessionVal) {
// Ö´ÐÐÆäËûÒµÎñ´úÂë
} else {
// Ö´ÐдíÎó´¦Àí
}
}) |
ºÃÁË£¬Í¨¹ý΢ÐÅÕ˺ŽøÐÐС³ÌÐòµÇ¼ºÍ״̬ά»¤µÄ¼òµ¥Á÷³Ì¾ÍÊÇÕâÑù£¬Á˽âÕâЩ֪ʶµãÖ®ºó£¬ÔÙ»ùÓڴ˽øÐкóÐøµÄ¿ª·¢¾Í»á±äµÃ¸üÈÝÒ×ÁË¡£
CSDN¼¼Êõ¹«¿ª¿Î³ÏÑû¶ÔС³ÌÐòÓÐʵ¼ù¾ÑéµÄ¼¼Êõר¼Ò¡¢×ÊÉ·¢Õߣ¬µ£ÈÎ΢ÐÅС³ÌÐò¼¼Êõ¹«¿ª¿Î½²Ê¦£¬´øÀ´ÓйØÐ¡³ÌÐò¸üÉîÈë¡¢¸üÈ«ÃæµÄ¼¼Êõ·ÖÏí¡£ÑûÇëÁ÷³ÌÇë¼û£ºhttp://geek.csdn.net/news/detail/134790¡£
Ò²»¶Ó¸÷λר¼ÒÀÏʦɨÃèÒÔ϶þάÂ룬¼ÓÇï¸èΪºÃÓÑ£¬Ç°À´×Éѯ£¬Ï໥½»Á÷¡£¼ÓºÃÓÑʱ£¬Çë×¢Ã÷£º½²Ê¦+С³ÌÐò¡£ |