我的编程空间,编程开发者的网络收藏夹
学习永远不晚

微服务(二) php laravel 用户客户端

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

微服务(二) php laravel 用户客户端

本节主要讲解通过laravel 作为客户端调用go kratos 服务端,实现用户注册登录

环境

docker desk
laradock
laravel

环境准备

  1. 通过laradock php-fpm 安装 grpc protobuf
  2. workspace 安装protoc安装 protoc 与 grpc_php_plugin 可执行文件(这个plugin创建整很久)
  3. 为方便把grpc_php_plugin放到GRPC文件目录
  4. 在worksapce使用protoc 与 grpc_php_plugin 生成客户端代码
protoc --proto_path=./ --php_out=./php-class="lazy" data-src/ --grpc_out=./php-class="lazy" data-src/ --plugin=protoc-gen-grpc=./grpc_php_plugin  ./api/user/v1/user.proto

生成客户端代码
在这里插入图片描述

实现

  1. 添加客户端调用服务层代码
    在这里插入图片描述
  2. 添加grpc 调用组件及GRPC服务的自动加载
composer require grpc/grpccomposer require google/protobuf

grpc 服务文件自动加载

"autoload": {        "psr-4": {            "App\\": "app/",            "Database\\Factories\\": "database/factories/",            "Database\\Seeders\\": "database/seeders/",            "GPBMetadata\\":"GRPC/php-class="lazy" data-src/GPBMetadata/",            "":"GRPC/php-class="lazy" data-src/"        }    },
  1. 增加jwt 中间件
composer require firebase/php-jwt

添加中间件app/Http/Middleware/ApiJwt.php

namespace App\Http\Middleware;use App\Service\Jwt;use Closure;use Illuminate\Http\Request;class ApiJwt{        public function handle(Request $request, Closure $next)    {        //将token放入header中传输        $token = $request->header('Authorization');        if (!$token) {            return response()->json(['code' => 500, 'msg' => 'token不存在', 'data' => []]);        }        $result = Jwt::decodeToken($token);        if ($result) {            //将加密id解密传入下一步            $request->attributes->add(['user_id' => $result->user_id, 'nickname' => $result->nickname]);        } else {            return response()->json(['code' => 500, 'msg' => 'token过期', 'data' => []]);        }        return $next($request);    }}

添加jwt 服务app/Service/Jwt.php

namespace App\Service;use Firebase\JWT\JWT as JwtService;use Firebase\JWT\Key;class Jwt{    protected static $key = 'laravel-tiway';    //加密    public static function createToken($userId, $nickname)    {        $payload = array(            "iss" => "http://example.org",            "aud" => "http://example.com",            'exp' => time() + (24 * 3600),            'user_id' => $userId,            'nickname' => $nickname,        );        $jwt = JwtService::encode($payload, self::$key, 'HS256');        return $jwt;    }    //解密    public static function decodeToken($jwt)    {        $decoded = JwtService::decode($jwt, new Key(self::$key, 'HS256'));        if ($decoded) {            return $decoded;        } else {            return false;        }    }}
  1. 实现登录注册 app/Http/Controllers/UserController.php
namespace App\Http\Controllers;use App\Service\GrpcUser;use App\Service\Jwt;use Illuminate\Http\Request;class UserController extends Controller{        public function register(Request $request)    {        $input = $request->only('nickname', 'mobile', 'password');        //用户手机号码是否已注册        $user = GrpcUser::getUserByMobile($input['mobile']);        if (isset($user['id'])) {            throw new \Exception('手机号码已被注册');        }        //创建用户        $user = GrpcUser::CreateUser($input['nickname'], $input['mobile'], $input['password']);        if (!isset($user['id'])) {            throw new \Exception('创建失败');        }        return response()->json([            'success' => true,            'data' => $user        ], 200);    }        public function login(Request $request)    {        $input = $request->only('mobile', 'password');        //是否已经存在相同手机号码        $isLogin = GrpcUser::checkoutUserPassword($input['mobile'], $input['password']);        if (!$isLogin) {            throw new \Exception('账号或密码错误');        }        //获取用户信息        $user = GrpcUser::getUserByMobile($input['mobile']);        //jwt        if (isset($user['id'])) {            $token = Jwt::createToken($user['id'], $user['nickname']);        }        return response()->json([            'success' => true,            'token' => $token,        ]);    }        public function getUser(Request $request)    {        $userId = $request->attributes->get('user_id');        $user = GrpcUser::getUserById($userId);        return response()->json(['user' => $user]);    }}

代码参考:laravel-tiway

总结

  1. 后期有时间把用户信息全部添加一个redis 缓存
  2. 简化controller,添加仓库层实现数据
  3. 如果你也是用docker desk,为求方便,联系我,我将提供workspace 和php-fpm 的镜像压缩包

来源地址:https://blog.csdn.net/qq_39941141/article/details/127448438

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

微服务(二) php laravel 用户客户端

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python thrift 服务端与客户

一、简介   thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#
2023-01-31

MySQL 客户端服务器端帮助

让我们了解 MySQL 客户端-服务器端帮助 -mysql> help search_string如果为上述“help”命令提供了参数,mysql将使用它作为搜索字符串来访问MySQL参考手册内容中的服务器端帮助。该命令的正确操作需要使用帮
2023-10-22

python rpyc客户端怎么调用服务端

这篇文章主要介绍“python rpyc客户端怎么调用服务端”,在日常操作中,相信很多人在python rpyc客户端怎么调用服务端问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python rpyc客户端怎
2023-07-02

python创建udp服务端和客户端

1.udp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 8888 6 BUFSIZ = 1024 7 ADDR = (HO
2023-01-30

python创建tcp服务端和客户端

1.tcp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 9999 6 BUFSIZ = 1024 7 ADDR = (HO
2023-01-30

PHP获取客户端及服务器端IP的封装类

PHP获取客户端和服务器端IP的封装类提供了一个PHP封装类,简化了获取客户端和服务器端IP地址的过程。该类使用多种方法来确定准确的IP地址,并提供了可扩展的API以支持其他功能。优点:简化IP获取高准确性可扩展性局限性:代理隐藏本地开发环境中的服务器端IP解析问题
PHP获取客户端及服务器端IP的封装类
2024-04-13

PHP获取客户端及服务器端IP的封装类

以下是一个封装了获取客户端和服务器端IP的PHP类的示例:```phpclass IPHelper {public static function getClientIP() {$ip = $_SERVER['REMOTE_ADDR'];i
2023-08-29

云服务器如何使用ssr客户端

使用SSR客户端可以很方便地在云服务器上创建和管理数据库。以下是一些示例:创建新的数据库连接:首先,在您的云服务上创建一个新的数据库连接。在连接上添加“openservers”选项,然后将“openserver”设置为您要连接的云服务的主机名。如果您要连接的主机名是“test_server”或“test.sources”,则可以将其替换为您的云服务器的主机名。创建新的数据库:选择您的数据库文件所在的路径和文件名
2023-10-27

PHP+Socket如何实现客户端与服务端数据传输

这篇文章主要介绍“PHP+Socket如何实现客户端与服务端数据传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP+Socket如何实现客户端与服务端数据传输”文章能帮助大家解决问题。sock
2023-07-05

如何使用服务帐户为 Google Calendar API 设置 golang 客户端

如何使用服务帐户为Google Calendar API设置golang客户端?这是许多开发者在使用Google Calendar API时经常遇到的问题。在这篇文章中,php小编香蕉将为你详细介绍如何使用服务帐户来配置golang客户端,
如何使用服务帐户为 Google Calendar API 设置 golang 客户端
2024-02-14

PHP高级特性:HTTP客户端与服务器实战

php提供http客户端库(curl、guzzlehttp)进行http请求发送,还支持创建http服务器(如swoole)。实战案例包括使用curl从api获取数据以及利用swoole创建自定义http服务器处理表单数据。PHP高级特性:
PHP高级特性:HTTP客户端与服务器实战
2024-05-16

服务端与客户端怎么利用socket传文件

这篇文章给大家介绍服务端与客户端怎么利用socket传文件,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。逻辑:1.客户端将需要查找的文件名以流的形式传给服务端2.服务端接受客户端的连接,把流转化为字符串,进行一个目录的
2023-05-31

Nacos服务注册客户端服务端原理分析

这篇文章主要为大家介绍了Nacos服务注册客户端服务端原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录