向特定用户发送推送通知-Laravel

Row*_*yri 2 notifications laravel pusher

在我的laravel应用中,我想使用Pusher向特定用户发送通知。

我将此代码放在我的方法中:

$pusher = App::make('pusher');

$pusher->trigger( 'notification-channel',
                  'notification-event', 
                   array('text' => 'this is a notification'));

return view('home');
Run Code Online (Sandbox Code Playgroud)

并将其放在home.blade.php中:

<script src="//js.pusher.com/3.0/pusher.min.js"></script>
<script>

    var pusher = new Pusher("{{env("PUSHER_KEY")}}");
    var channel = pusher.subscribe('notification-channel');
    channel.bind('notification-event', function(data) {
      alert(data.text);
    });
Run Code Online (Sandbox Code Playgroud)

但这会使通知显示给任何用户。这还存在另一个问题,即用户应该只在主页上才能接收通知!

因此,我该怎么做才能将通知发送给特定用户,并使该用户从任何页面接收该通知?

Edd*_*ove 5

为了使用户能够从任何页面接收该代码,请在您的任何页面中放入您的Pusher代码layout.blade.php。或所有页面将扩展的任何其他文件。

若要将其分配给特定用户,您可以通过将用户ID附加到类似

'notification-channel:' . $user->id
Run Code Online (Sandbox Code Playgroud)

因此,在布局文件中,您可以收听该频道

var user = <?php echo $user ; ?>;
var channel = pusher.subscribe('notification-channel:' + user.id);
Run Code Online (Sandbox Code Playgroud)

尽管只有使用该功能的用户才能收到通知,但您的通知仍保持公开状态。意味着任何人都可以操纵其ID并接收其他人的通知。如果您想要私人通知,则可以按照以下说明进行操作:https : //laravel.com/docs/5.4/broadcasting#authorizing-channels

  • 不好,请尝试用点代替冒号。因此它成为“通知通道”。。$ user-&gt; id;` (2认同)
  • 无论您使用什么,都可以通过“Auth::user()”或简单地将其从控制器传递给视图来获取用户。您实际上并不需要用户本身。您可以只传递一个带有用户 ID 的变量。就像在您的控制器中一样,您执行 `return view('viewname', ['userid' =&gt; 1]);` (2认同)