由于站点使用java开发 所以本技术说明仅适用于于java
根据官方说明文档
一个已经有用户系统的网站使用多说评论框,可以通过cookie,告知多说用户在站点中的身份,让站点用户可以直接评论。对于之前已经登录过的多说用户,如果两个身份没有产生关联关系,也会优先显示站点中的身份。<>
原理
将当前站点用户信息以JWT( JSON Web Token ) 的方式处理,生成token,把token设置成的cookies,评论框加载时会从cookies中获取token,得到当前站点用户信息,
{
"short_name": "official",
"user_key": "1",
"name": "网站用户A"
}
-
short_name
当前站点注册的多说二级域名。例如:你注册了http://apitest.duoshuo.com/时,多说二级域名为**apitest**。
-
user_key
用户在当前站点中对应的唯一标示,通常是用户ID。
-
name
用户在当前网站的用户名。
-
-
我们可以获取大概流程
-
1.将二级域名、本地账户的id、评论时需要显示的名称以某种规定的方式生成字符串a。
-
以上代码源自多说package com.vtars.outsale.Utils.jwt; import net.minidev.json.JSONObject; import org.apache.log4j.Logger; import com.nimbusds.jose.JOSEException; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.JWSHeader; import com.nimbusds.jose.JWSObject; import com.nimbusds.jose.JWSSigner; import com.nimbusds.jose.Payload; import com.nimbusds.jose.crypto.MACSigner; public class LocalComment { private static Logger logger = Logger.getLogger("appender1"); private static String DUOSHUO_SECRET = "你的DUOSHUO_SECRET </span>"; /** * * @param shortname * 站点在多说的二级域名 * @param userkey * 本地用户的id * @param showame * 显示昵称 * @return */ public static String dojwt(String userkey, String showame) { JSONObject userInfo = new JSONObject(); userInfo.put("short_name", "vtars");// 必须项 userInfo.put("user_key", userkey);// 必须项 userInfo.put("name", showame);// 可选项 Payload payload = new Payload(userInfo); JWSHeader header = new JWSHeader(JWSAlgorithm.HS256); header.setContentType("jwt"); // Create JWS object JWSObject jwsObject = new JWSObject(header, payload); // Create HMAC signer JWSSigner signer = new MACSigner(DUOSHUO_SECRET.getBytes()); try { jwsObject.sign(signer); } catch (JOSEException e) { logger.error("Couldn't sign JWS object: " + e.getMessage()); return null; } // Serialise JWS object to compact format String token = jwsObject.serialize(); return token; // 示例输出结果为eyJhbGciOiJIUzI1NiIsImN0eSI6Imp3dCJ9.eyJ1c2VyX2tleSI6IjEiLCJuYW1lIjoi572R56uZ55So5oi3QSIsInNob3J0X25hbWUiOiJ0ZXN0In0.NXKDXwXThzFkyfl_k_-p6mfM5cpOFppvfdIjrjEq14I } }
-
2.将a以duoshuo_token的值的方式设置到cookie
-
/** * 设置多说评论登录cookie 过期时间2天 */ Cookie duoshuoCookie = new Cookie("duoshuo_token", LocalComment.dojwt(username, username)); duoshuoCookie.setMaxAge(60 * 60 * 24 * 2); duoshuoCookie.setPath(request.getContextPath()); response.addCookie(duoshuoCookie);
3.评论框加载时会读取duoshuo_token 并解析出用户信息,当用户评论的时候就就会以本地用户的信息评论
-
-