热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pusher入门:使用专用频道

在本系列中,我们一直在学习Pusher中的Channels,该平台可让您为用户提供所需的无缝实时体验。专用通道为您的应用程序提供了一种安全的专用媒体来发

在本系列中,我们一直在学习Pusher中的Channels ,该平台可让您为用户提供所需的无缝实时体验。

专用通道为您的应用程序提供了一种安全的专用媒体来发布消息。 最好的部分是为您的应用程序实现和使用私有渠道有多么容易。 您将在本文中学习如何使用它们。

更好的聊天应用

在上一个视频中,我们看了一个非常简单的聊天应用程序,它没有用户,也没有安全性。 这只是匿名聊天。 它有效,请不要误会我,但我们可以做得更好! 因此,在此视频中,我们将介绍该聊天应用程序的一个稍有不同的版本。 前端基本相同,但后端是Laravel应用程序。


设置服务器

即使该应用程序由Laravel驱动,也使用相同的原理来处理我们的消息。 现在,我们有了一个ChannelsController来处理面向Channels的内容,而不是单个文件,并且它具有sendMessage()方法来处理来自客户端的传入聊天请求。 您可以在下面看到其代码:

public function sendMessage(Request $request) {if (!Auth::check()) {return new Response('Forbidden', 403);}$data = $request->json()->all();$data['user'] = Auth::user()->name;$this->pusher->trigger('anon-chat', 'send-message', $data);}

我想保护我们的聊天,以便只有经过身份验证的用户才能访问它,并且您可以在上面的代码中看到它在触发send-message事件之前检查用户是否经过身份验证。 这是一个很好的开始,但还不足以完全保护我们的聊天,因为任何有权访问我们的应用程序密钥和群集信息的人都可以订阅并收听通过我们应用程序的公共渠道发送的任何消息。 为了完全保护我们的聊天,我们需要使用专用通道发送消息,第一步是创建一个专用通道。

要创建一个专用通道,我们只需用一个通道上触发事件private-前缀。 因此,我们可以将对trigger()的先前调用更改为以下代码:

$this->pusher->trigger('private-chat', 'send-message', $data);

现在,此代码将通过private-chat通道发送消息,从服务器的角度来看,这是服务器通过专用通道发送消息的唯一要求。 但是,客户端需要进行身份验证才能订阅专用通道,并且通过向专用终结点发送请求来进行认证。

编写客户端授权端点

当客户端库尝试订阅专用通道时,它将向授权端点发出POST请求。 该端点只有一项工作:确定用户是否已通过身份验证并以适当的响应进行响应。 一个名为authorizeUser()新方法将处理此请求,其代码非常简单。

public function authorizeUser(Request $request) {if (!Auth::check()) {return new Response('Forbidden', 403);}echo $this->pusher->socket_auth($request->input('channel_name'), $request->input('socket_id'));}

它首先检查用户的身份验证状态,如果用户未登录,则以403 Forbidden进行响应。但是,如果通过了用户的auth检查, authorizeUser()方法需要输出一个特殊值,该特殊值从请求的两个值派生而来。身体。

输出由Pusher库的socket_auth()方法生成,如上面的代码所示。 如果结果输出与客户端库期望的值匹配,则客户端将通过身份验证并可以订阅专用通道。

幸运的是,整个过程是自动化的。 我们只需要配置客户端以将授权请求发送到此端点。

配置客户端

为客户端库创建Pusher对象时,可以配置结果对象以将身份验证请求发送到特定端点。 只需添加一个authEndpoint选项并将其设置为端点的URL,如以下代码所示。

let pusher = new Pusher('427017da1bd2036904f3', {authEndpoint: '/channels/authorize',cluster: 'us2',encrypted: true,auth: {headers: {'X-CSRF-Token': this.csrfToken}}});let channel = pusher.subscribe('private-chat');

您还可以使用auth选项设置任何身份验证标头。 此代码设置X-CSRF-Token标头,以防止跨站点请求伪造攻击。

现在,当客户端尝试订阅专用频道时,它将使用提供的端点URL进行身份验证,并根据响应允许或拒绝对频道的访问。

结论

使用专用通道可以极大地提高应用程序的安全性,并且轻松配置应用程序以使用它们。 使用Pusher的Channels ,可以非常轻松地为您的应用程序添加安全的实时通信,甚至不需要很多代码!

翻译自: https://code.tutsplus.com/tutorials/get-started-with-pusher-using-private-channels--cms-31253



推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
author-avatar
phpyi
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有