微信小程序实现登录之java后台
第一步:前端调用wx.login()函数,获取返回的code值。(每次通过wx.login()得到的code值可能不一样)
第三步:将用户openid保存到数据库,并将用户id返回到前端,放到缓存中保持登录态。
个人比较喜欢在小程序启动时,将登陆代码写到onLanuch()中,每次小程序启动后,去登陆,如果第一次进入该小程序,就将新用户保存到数据库,如果不是新用户,将用户id返回到前端。下面给出app.js文件的实现代码:
//app.js App({ onLaunch: function() { let that = this; wx.login({ success: function (res) { //console.log(res.code); if (res.code) { wx.request({ url: that.globalData.host + /xxx/xxx/xxxx/xxxx,//这里写自己java后台的请求地址 method: POST, data: { code: res.code }, header: { content-type: application/x-www-form-urlencoded }, success(res) { //console.log(用户登录成功!id= + res.data.session_key); wx.setStorageSync("userid", res.data.userid);//将用户id保存到缓存中 wx.setStorageSync("session_key", res.data.session_key);//将session_key保存到缓存中 } }) } else { console.log(获取用户登录态失败! + res.errMsg) } } }) }, globalData: { host: http://localhost:80 } })
java后台的接收代码如下:
HttpUtil工具类实现如下:
package xxx.xxxxxx.xxxxxxxx.xxxxxxxxxx; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map.Entry; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.commons.httpclient.HttpStatus;//此类需要添加maven依赖或jar包 /** 将此依赖添加到pom.xml中 <!-- HttpUtils所需包--> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> **/ public class HttpUtil { public static String doGet(String urlPath, HashMap<String, Object> params) throws Exception { StringBuilder sb = new StringBuilder(urlPath); if (params != null && !params.isEmpty()) { // 说明有参数 sb.append("?"); Set<Entry<String, Object>> set = params.entrySet(); for (Entry<String, Object> entry : set) { // 遍历map里面的参数 String key = entry.getKey(); String value = ""; if (null != entry.getValue()) { value = entry.getValue().toString(); // 转码 value = URLEncoder.encode(value, "UTF-8"); } sb.append(key).append("=").append(value).append("&"); } sb.deleteCharAt(sb.length() - 1); // 删除最后一个& } // System.out.println(sb.toString()); URL url = new URL(sb.toString()); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); // 5s超时 conn.setRequestMethod("GET"); if (conn.getResponseCode() == HttpStatus.SC_OK) {// HttpStatus.SC_OK == // 200 BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); StringBuilder sbs = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { sbs.append(line); } // JSONObject jsonObject = new JSONObject(sbs.toString()); return sbs.toString(); } return null; } }
Configure类的代码如下:
package xxxx.xxxxx.xxxxxxxx.xxxxxxx; /** * 这里放置各种配置数据 */ public class Configure { /************************************************************小程序设置********************************************************************/ public static String mini_appID = "xxxxxxxxxxxxxxxxx";//appid,去自己的小程序后台找 public static String mini_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";//appsecret,去自己小程序后台找 public static String grant_type = "authorization_code"; /************************************************************小程序设置********************************************************************/ }
以上为所有的代码,有疑问的小伙伴可以留言,或者有错误之处还请多多指正。
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
CC微校园小程序(云开发)设计方案