暂时修改添加了这个功能,思路大概是:
利用每次登录都记录loginip和logintime这段功能,把每次获取到的头像和昵称信息记录一下。
在小程序里,需要显示的部分,实际上都已经有新取得的数据了,直接显示就行了。
1. 在/addons/cms/controller/wzapp/User.php里的login()函数里添加'avatar' => $userInfo['avatarUrl'], 这个变量后面需要。$result = [
'openid' => $json['openid'],
'userinfo' => [
'nickname' => $userInfo['nickName'],
'city' => $userInfo['city'],
'avatar' => $userInfo['avatarUrl'], /// 后添加
],
'access_token' => $json['session_key'],
'refresh_token' => '',
'expires_in' => isset($json['expires_in']) ? $json['expires_in'] : 0,
];
2. 在/addons/third/library/Service.php里的第三方登录connect()函数里添加代码:public static function connect($platform, $params = [], $extend = [], $keeptime = 0)
{
$time = time();
$values = [
'platform' => $platform,
'openid' => $params['openid'],
'openname' => isset($params['userinfo']['nickname']) ? $params['userinfo']['nickname'] : '',
'access_token' => $params['access_token'],
'refresh_token' => $params['refresh_token'],
'expires_in' => $params['expires_in'],
'logintime' => $time,
'expiretime' => $time + $params['expires_in'],
];
$auth = \app\common\library\Auth::instance();
if ($params['userinfo']['nickname'] && $params['userinfo']['avatar']) { // 后添加部分
$user_nickname = $params['userinfo']['nickname'];
$user_avatarUrl = $params['userinfo']['avatar'];
} else {
$user_nickname = null;
$user_avatarUrl = null;
}
$auth->keeptime($keeptime);
$third = Third::get(['platform' => $platform, 'openid' => $params['openid']]);
if ($third) {
$user = User::get($third['user_id']);
if (!$user) {
return FALSE;
}
$third->save($values);
return $auth->direct($user->id, $user_nickname, $user_avatarUrl); 后2个参数为后添加
} else {
// 先随机一个用户名,随后再变更为u+数字id
3. 在/application/common/library/Auth.php里的direct()函数添加2个参数,然后在save()之前添加需要保存的头像和昵称信息:public function direct($user_id, $user_nickName, $user_avatarUrl) //添加后2个参数
{
$user = User::get($user_id);
if ($user)
{
同步到Ucenter
if (defined('UC_STATUS') && UC_STATUS)
{
$uc = new \addons\ucenter\library\client\Client();
$re = $uc->uc_user_login($this->user->id, $this->user->password . '#split#' . $this->user->salt, 3);
// 如果小于0则说明发生错误
if ($re <= 0)
{
$this->setError('Username or password is incorrect');
return FALSE;
}
}
$ip = request()->ip();
$time = time();
//判断连续登录和最大连续登录
if ($user->logintime < \fast\Date::unixtime('day'))
{
$user->successions = $user->logintime < \fast\Date::unixtime('day', -1) ? 1 : $user->successions + 1;
$user->maxsuccessions = max($user->successions, $user->maxsuccessions);
}
$user->prevtime = $user->logintime;
//记录本次登录的IP和时间 (后加了记录,也就是更新用户头像和昵称)
$user->loginip = $ip;
$user->logintime = $time;
if ($user_nickName && $user_avatarUrl && $user_nickName != null && $user_avatarUrl != null) { // 后加了这部分
$user->nickname = $user_nickName;
$user->avatar = $user_avatarUrl;
}
$user->save();