多说本地身份说明(JWT)

一个已经有用户系统的网站使用多说评论框,可以通过cookie,告知多说用户在站点中的身份,让站点用户可以直接评论。对于之前已经登录过的多说用户,如果两个身份没有产生关联关系,也会优先显示站点中的身份。

原理

将当前站点用户信息以JWT( JSON Web Token ) 的方式处理,生成token,把token设置成的cookies,评论框加载时会从cookies中获取token,得到当前站点用户信息,

{       
    "short_name": "official",
    "user_key": "1", 
    "name": "网站用户A"
}

使用JWT库进行处理

以上信息经过base64编码、hamc SHA256加密,得到token。主流建站语言都有相关的JWT库:

关于JWT规范请参看RFC文件: JSON Web Token (JWT)

示例代码

注意:示例代码中DUOSHUO_SECRET是站点多说密钥,请在多说管理后台获取并定义该变量。

PHP

require 'JWT.php';

$token = array(
    "short_name"=>"official",
    "user_key"=>"1",
    "name"=>"网站用户A",
);
$duoshuoToken = JWT::encode($token, DUOSHUO_SECRET);

完整实现可参考多说WordPress插件:https://github.com/duoshuo/duoshuo-wordpress/blob/master/duoshuo/WordPress.phpjwt函数

Python

import jwt

token = {       
    "short_name": "official",
    "user_key": "1", 
    "name": "网站用户A"
}

duoshuo_token = jwt.encode(token, DUOSHUO_SECRET)

Ruby

# encoding: UTF-8

require 'jwt.rb'
token = {"short_name"=>"official", "user_key"=>"1", "name"=>"网站用户A"}
duoshuo_token = JWT.encode(token, DUOSHUO_SECRET)

最后生成的token如下

eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJ1c2VyX2tleSI6ICIxIiwgIm5hbWUiOiAiXHU1OTFhXHU4YmY0XHU3NTI4XHU2MjM3IiwgInNob3J0X25hbWUiOiAib2ZmaWNpYWwifQ.LIZitiT9uLeDefN1g7GiLX-7ECSvcv06aMsQtEinev4

将生成的token设置成站点Cookies

PHP

setcookie('duoshuo_token',  $duoshuoToken, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie);

setcookie函数使用:http://www.php.net/manual/zh/function.setcookie.php

Python(Django)

response = Http
respnse.set_cookies('duoshuo_token', duoshuo_token)

Java

请参考 https://github.com/AllenDingChen/duoshuo-JWTExample/

恭喜!现在多说评论框上显示的是你自己网站的身份了!如果你想设置用户点击多说评论框上的【登录】【登出】系统,实现更好的整合,请参考 多说SSO登录说明