javascript - 如何向特定用户推送通知 Node + AngularJS + Laravel

标签 javascript angularjs node.js redis laravel-5

我需要有关如何将通知推送给特定用户的帮助。我现在可以推送通知,但所有用户都会收到该通知。我可以在 clinet 端过滤它,但我认为它不安全......

首先我用 laravel 5 发送数据:

$redis = Redis::connection();
$redis->publish('update.answer', json_encode($events));

这是我发出数据的 node.js:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('update.group', function(err, count) {
});
redis.subscribe('update.question', function(err, count) {
});
redis.subscribe('update.answer', function(err, count) {
});
redis.subscribe('update.comment', function(err, count) {
});
redis.on('message', function(channel, message) {
    message = JSON.parse(message);
    console.log(message);
    io.emit(channel, message);
});
http.listen(3000, function(){
    console.log('Listening on Port 3000');
});

我使用 angularjs 获取数据并推送给客户端。

socket.on('update.answer',function(data){
            if($scope.remove){
                $scope.remove = false;
            }
            $scope.feed = $("#feed").val();
            if(parseInt($scope.feed) === parseInt(data.userID)){
            $scope.answers.push(data);
            $scope.$digest();
            }
        });

这部分:

 $scope.feed = $("#feed").val();
                    if(parseInt($scope.feed) === parseInt(data.user_id) && data.admin_id !== null){

}

我检查客户端是否应该收到通知,但它是不安全的...

有什么办法可以改善吗?

最佳答案

要向特定用户推送消息,您必须在某处存储他/她的引用。

前任

io.on('connection', function(socket) {
     socket.on('add-user', function(data){
        clients[data.username] = socket;
      });
});

现在向特定用户推送消息只需使用他的用户名来检索他的套接字

clients[data.username].emit(channel, message);

更新:解释

这假设每个使用您的网络应用程序的用户都有某种身份验证。

一旦用户登录到您的应用程序,就让他加入 nodejs 后端套接字。

在客户端

socket.emit('add-user',userObj); 
        });

userObj是包含用户详细信息的对象,你也可以单独发送用户名

socket.emit('add-user',username);

在你的 nodejs 中首先 decalre 一个包含所有加入网站的用户的套接字的数组

var clients = [];

现在在您的 nodejs 应用程序中编写此附加代码

   io.on('connection', function(socket) {
         socket.on('add-user', function(data){
            clients[data.username] = socket;
          });
    });

到目前为止,登录您网站的用户将从客户端调用 add-user 事件,该事件将依次调用 nodejs 和套接字上的 add-user将被添加到客户端数组中

现在要向任何特定用户发送消息,您必须知道用户名,所以如果您知道用户的用户名,那么您可以简单地向他们发送消息,使用

clients[data.username].emit(channel, message);

关于javascript - 如何向特定用户推送通知 Node + AngularJS + Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32549851/

相关文章:

javascript - 具有 unicode 字符的 Angular JS 电子邮件验证

用于文本/数字的 AngularJS 自定义过滤器

javascript - 使用 nodemailer angular 6 发送电子邮件

json - 使用 Nodejs 将 DynamoDB 中的 map 结构插入到现有 map 中

javascript - 从日期中提取错误的月份

javascript - 使用 bootstrap 时关闭 $routeprovider

javascript - 为什么我第二次执行时间隔变得更快 - jQuery

node.js - Node - Passport-http 如果失败如何返回 json 响应

javascript - 如何使用 React 从数据库中获取正确的数据

javascript - javascript函数中的奇怪行为