查看: 597|回复: 0

fastadmin第三方登录

[复制链接]

748

主题

39

回帖

3907

积分

管理员

总舵主

积分
3907
QQ
发表于 2024-5-26 12:53:22 | 显示全部楼层 |阅读模式

  1.     /**
  2.      * 第三方登录
  3.      * @param string $platform 平台
  4.      * @param array  $params   参数
  5.      * @param array  $extend   会员扩展信息
  6.      * @param int    $keeptime 有效时长
  7.      * @return boolean
  8.      */
  9.     public static function connect($platform, $params = [], $extend = [], $keeptime = 0)
  10.     {

  11.         $time = time();
  12.         $nickname = $params['nickname'] ?? ($params['userinfo']['nickname'] ?? '');
  13.         $avatar = $params['avatar'] ?? ($params['userinfo']['avatar'] ?? '');
  14.         $access_token = $params['access_token'] ?? '';
  15.         $refresh_token = $params['refresh_token'] ?? '';
  16.         $expires_in = $params['expires_in'] ?? 0;
  17.         $values = [
  18.             'platform'      => $platform,
  19.             'openid'        => $params['openid'],
  20.             'openname'      => $nickname,
  21.             'avatar'        => $avatar,
  22.             'access_token'  => $access_token,
  23.             'refresh_token' => $refresh_token,
  24.             'expires_in'    => $expires_in,
  25.             'logintime'     => $time,
  26.             'expiretime'    => $time + $expires_in,
  27.         ];
  28.         $values = array_merge($values, $params);

  29.         $auth = \app\common\library\Auth::instance();

  30.         $auth->keeptime($keeptime);
  31.         //是否有自己的
  32.         $third = self::get(['platform' => $platform, 'openid' => $params['openid']], 'user');
  33.         if ($third) {
  34.             if (!$third->user) {
  35.                 $third->delete();
  36.             } else {
  37.                 $third->allowField(true)->save($values);
  38.                 // 写入登录Cookies和Token
  39.                 return $auth->direct($third->user_id);
  40.             }
  41.         }

  42.         //存在unionid就需要判断是否需要生成新记录
  43.         if (isset($params['unionid']) && !empty($params['unionid'])) {
  44.             $third = self::get(['platform' => $platform, 'unionid' => $params['unionid']], 'user');
  45.             if ($third) {
  46.                 if (!$third->user) {
  47.                     $third->delete();
  48.                 } else {
  49.                     // 保存第三方信息
  50.                     $values['user_id'] = $third->user_id;
  51.                     $third = self::create($values, true);
  52.                     // 写入登录Cookies和Token
  53.                     return $auth->direct($third->user_id);
  54.                 }
  55.             }
  56.         }

  57.         if ($auth->id) {
  58.             if (!$third) {
  59.                 $values['user_id'] = $auth->id;
  60.                 self::create($values, true);
  61.             }
  62.             $user = $auth->getUser();
  63.         } else {
  64.             // 先随机一个用户名,随后再变更为u+数字id
  65.             $username = Random::alnum(20);
  66.             $password = Random::alnum(6);
  67.             $domain = request()->host();

  68.             Db::startTrans();
  69.             try {
  70.                 // 默认注册一个会员
  71.                 $result = $auth->register($username, $password, $username . '@' . $domain, '', $extend);
  72.                 if (!$result) {
  73.                     throw new Exception($auth->getError());
  74.                 }
  75.                 $user = $auth->getUser();
  76.                 $fields = ['username' => 'u' . $user->id, 'email' => 'u' . $user->id . '@' . $domain];
  77.                 if ($nickname) {
  78.                     $fields['nickname'] = $nickname;
  79.                 }
  80.                 if ($avatar) {
  81.                     $fields['avatar'] = function_exists("xss_clean") ? xss_clean(strip_tags($avatar)) : strip_tags($avatar);
  82.                 }

  83.                 // 更新会员资料
  84.                 $user = User::get($user->id);
  85.                 $user->save($fields);

  86.                 // 保存第三方信息
  87.                 $values['user_id'] = $user->id;
  88.                 self::create($values, true);
  89.                 Db::commit();
  90.             } catch (\Exception $e) {
  91.                 Db::rollback();
  92.                 $auth->logout();
  93.                 return false;
  94.             }
  95.         }
  96.         // 写入登录Cookies和Token
  97.         return $auth->direct($user->id);
  98.     }
复制代码


道不同,不相为谋!理想要有,万一实现了呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:2513533699@qq.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19000917号|鲁公网安备37078302000320号

在本版发帖
关注公众号
QQ客服返回顶部