/** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $weixin = $request->session()->get('wechat.oauth_user'); // 不接受无信用的凭证 if (empty($weixin['id']) || strlen($weixin['id']) !== 28) { return abort(405); } // 生成一个随机的userKEY用于会话验证 // 将该session的过期时间设置为比access_token // 的refresh时长多10s,一旦access_token刷新, // userKEY的值会重新计算并存储 $token = $weixin['token']; $refresh = $token['refresh_token']; $expires = $token['expires_in']; // 假设用户数据已经存在于数据库中 $user = Weixin_User::getFullyUserInfoWithOpenID($token['openid']); if (empty($user)) { $user = Weixin_User::storeNewUserInfo(new Weixin_User(), $weixin->toArray()); } $user_id = $user->user_id; $key = 'jk_session:' . $user_id . ':userKEY'; // 存储当前会话消息 $request->session()->put('jukebox_user', $user_id); // 计算并存储userKEY if (!\PRedis::command('get', [$key])) { \PRedis::command('setex', [$key, intval($expires) + 10, str_limit($refresh, 5) . str_random(1)]); } return $next($request); }
/** * */ public static function getUserVotesWithUserID($song_id, $user_id) { return \PRedis::command('hget', ['jk_upvote:' . $song_id . ':userLIST', $user_id]); }