genjudev / strapio Goto Github PK
View Code? Open in Web Editor NEWSocket.IO Implementation for Strapi
Socket.IO Implementation for Strapi
I maybe came across some issues with the checking of a token:
Is it intended, that a connection can be established even if no token is provided (no query object at all)?
To go even further: If a user connects without a token, he will receive ALL events without permission checking...
If a user connects to the socket with an invalid token, it causes an exception in strapi, but the user did not get any feedback over the socket, that maybe the token is invalid.
Could you verify that there may is a bug in this package?
Is there a way to use this module when Strapi is launched with PM2 on multiple instances?
when a client/user connects with the server, there must be an event to it like socket.io has on.connect event, on disconnect event.
A comma between each async statement is required in the {controller}.js file.
Hi,
i have followed the readme to get strapio working with v4 but, i got 404 notFound..
i have tried to harcoded the JWT token, but still unable to get the socket.io working.
Add documentation for the config block that it is exactly the same as refernced in the socket.io official documentation
option, non optional configs
I was not able to get this to work on Strapi >4.0.6 with the adjustments that they made to how plugin extensions work (possibly the case)
the user-permissions
plugin seems to have changed as well
To note: I'm currently using 4.1
the Migration notes:
https://docs.strapi.io/developer-docs/latest/update-migration-guides/migration-guides/v4/migration-guide-4.0.x-to4.0.6.html
When having multiple Roles with permission for a Content-Type payloads are emitted multiple times.
for (var i in roles) { //<--- problem
const roleDetail = await this._upServices().userspermissions.getRole(
roles[i].id,
plugins
);
if (
roleDetail.permissions.application.controllers[
vm.identity.toLowerCase()
][action].enabled
) {
console.log(i)
if(entity._id || entity.id) {
this.io.sockets
.in(`${vm.identity.toLowerCase()}_${entity._id || entity.id}`)
.emit(action, this.sendDataBuilder(vm.identity, entity))
}
this.io.sockets
.in(vm.identity.toLowerCase())
.emit(action, this.sendDataBuilder(vm.identity, entity));
}
}
A client needs to send socket events to the server and the server has to listen to the incoming events. Socket.io implements the following methods: .on, .once, off, removeAllListeners. In Strapi v3 I was able to use them as follows:
const io = require('socket.io')(strapi.server, {
// optional config
})
io.on('connection', function(socket) {
socket.on('someCommand', () => {
// ...do something here
})
})
Alas, it is no longer possible with v4. And the StrapIO plugin currently doesn't support this much needed functionality.
I tried the solution you suggested in your Discord channel:
process.nextTick(() => {
const _strapio = (require("strapio"))(strapi, {
cors: { origin: "*", methods: ["GET", "POST"] },
});
_strapio.io.on('connection', () => {
console.log('user connected')
})
strapi.io = _strapio.io
})
But getting this error: TypeError: Cannot read property 'on' of undefined
. There's no io
property on the object returned by the plugin.
Is there any plan to include the Admin UI of socket.io?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.