IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 阿里云一键登录(对接移动端) PHP -> 正文阅读

[PHP知识库]阿里云一键登录(对接移动端) PHP

阿里云一键登录(对接移动端) PHP

一键登录的流程

在这里插入图片描述

一键登录的好处

极速稳定
无需发送短信验证码,避免出现通道拥堵,短信延迟等不稳定因素。
节约短信成本
一键登录比短信验证成本降低了20%以上,而且不需要专门的开发运营。
优化用户体验
用户只需点击一下,不需要输入密码和验证码,2秒完成注册/登录。
降低注册
降低注册/登录门槛、从而减少流失率、提高转化率和留存率。
绑定手机号码运营商端校验手机号码,能确保手机号码的真实有效性,过滤无效注册/异常登录。
安全无风险
SUBMAIL 一键登录服务应用多种安全机制,服务器直连运营商接口,杜绝被劫持、盗用、篡改、刷量等风险。

第一步阿里云申请:

在这里插入图片描述
服务端不用拿这的任何东西(需要AccessKey管理拿值)

直接上代码:

  //APP端请求后端登录接口一键登录

   public function oneClickLogin(Request $request)
    {
        $aliToken= $request->param('aliToken');//app端授权一键登录请求得到的token
        if(empty($aliToken)){
            return   GetJson::getJson(nullValue, 'token不能空', []);
        }
    //后端拿着APP端给的token请求阿里云getmobile接口获取手机号
        $aliRes = $this->aliLoginGetMobile($aliToken);
        if($aliRes['status'] == 'success'){
            if(isset($aliRes['data']['Code']) && $aliRes['data']['Code'] == 'OK') {
                $telphone = $aliRes['data']['GetMobileResultDTO']['Mobile'];//得到手机号
                $user = User::where('mobile', $telphone)->find();
                if (!$user) {
                    $login_type=1;
                    return $this->extracted($login_type,$telphone);
                }
                //登录
                return $this->setToken($user);
            }

            return  GetJson::getJson( Asuccess,$aliRes['data']['Code'].':'.$aliRes['data']['Message'], []);
        }
        return   GetJson::getJson( Asuccess,$aliRes['code'].':'.$aliRes['msg'], []);

    }

    private function aliLoginGetMobile($token = ''){
        // Download:https://github.com/aliyun/openapi-sdk-php
        // Usage:https://github.com/aliyun/openapi-sdk-php/blob/master/README.md
        $accessKeyId = config('alycode.aliOauth.accessKeyId');
        $accessKeySecret = config('alycode.aliOauth.accessKeySecret');//后期可以如数据缓存中,可以方便修改
        AlibabaCloud::accessKeyClient($accessKeyId, $accessKeySecret)
            ->regionId('cn-hangzhou')
            ->asDefaultClient();
        try {
            $result = AlibabaCloud::rpc()
                ->product('Dypnsapi')
                ->scheme('https') // https | http
                ->version('2017-05-25')
                ->action('GetMobile')
                ->method('POST')
                ->host('dypnsapi.aliyuncs.com')
                ->options([
                    'query' => [
                        'RegionId' => "cn-hangzhou",
                        'AccessToken' => $token
                    ],
                ])
                ->request();
            return array('status' => 'success', 'data' => $result->toArray());
        } catch (ClientException $e) {
            return array('status' => 'failed', 'code' => $e->getErrorCode(), 'msg' => $e->getErrorMessage());
        } catch (ServerException $e) {
            return array('status' => 'failed', 'code' => $e->getErrorCode(), 'msg' => $e->getErrorMessage());
        }
    }
/**
     * Notes:
     * User: 
     * DateTime: 2022/1/4 10:07 上午
     * @param $newUser
     * @return Response|string|\think\response\Json
     */
    public  function setToken($newUser)
    {

        //储存用户信息
        $redis = Rediscon::get_instance();

        $userInfo = $redis->hgetall('userInfo_' . $newUser['id']);
        if (!$userInfo) {
            foreach ($newUser as $k => $v) {
                $redis->hset('userInfo_' . $newUser['id'], $k, $v);
            }
        }
        $getToken=(new TokenServer())->generateToken($newUser['id']);
        $Refreshtoken=(new TokenServer())->refreshToken($newUser['id']);
        if ($getToken && $Refreshtoken) {
            $dataValue = $this->getDataValue($newUser, $getToken, $Refreshtoken);
            Log::write(json_encode($dataValue), 'info');
            return GetJson::getJson(Asuccess, '登录成功', [$dataValue]);
        }
        return  GetJson::getJson($this->Afile, '登录失败', []);
    }
        /**
     * Notes:
     * User: 
     * DateTime: 2022/1/4 2:28 下午
     * @param $phone
     * @return Response|string|\think\response\Json
     * @throws DataNotFoundException
     * @throws DbException
     * @throws ModelNotFoundException
     */
    public  function  extracted($login_type,$phone)
    {
        $id = User::addUserInfo($login_type, $phone);
        $newUser = User::where('id', $id)->find();
        $newUser = json_decode(json_encode($newUser), true);
        //储存用户信息
        $redis = Rediscon::get_instance();
        $userInfo = $redis->hgetall('userInfo_' . $id);
        if (!$userInfo) {
            foreach ($newUser as $k => $v) {
                $redis->hset('userInfo_' . $newUser['id'], $k, $v);
            }
        }
        $getToken = (new TokenServer())->generateToken($id);
        $Refreshtoken=(new TokenServer())->refreshToken($id);
        if ($getToken && $Refreshtoken) {
            $dataValue = $this->getDataValue($newUser, $getToken, $Refreshtoken);
            Log::write('日志', 'info', $dataValue);
            return GetJson::getJson(Asuccess, '登录成功', [$dataValue]);
        }

        return   GetJson::getJson($this->Afile, '登录失败', []);
    }
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:08:09  更:2022-03-08 22:08:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:02:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码