AdonisJS Socket.IO JWT身份验证



如何定义身份验证提供程序?现在,每次在playerLogin方法中未定义auth变量时。

我正在使用Adonis v4.1

代码:启动/socket.js

const Server = use('Server')
const io = use('socket.io')(Server.getInstance())
// Define controllers here
// Example: const WSController = use('App/Controllers/Http/ChatController')
const AuthenticateController = use('App/Controllers/Http/AuthenticateController');
io.on('connection', function (socket) {
// Define here the controller methods
// Example: WSController.goMessage(socket, io)
AuthenticateController.playerLogin(socket, io);
AuthenticateController.playerRegister(socket, io);
})

AuthenticateController.js

const Hash = use('Hash')
const User = use('App/Models/User')
class AuthenticateController {
static playerLogin(socket, io, {auth}) {
socket.on('playerLogin', async (data) => {
console.log('WORKS')
if (await auth.attempt(data.email, data.password)) {
let user = await User.findBy('email', data.email)
let accessToken = await auth.generate(user)
socket.emit('sendPlayerToken', { token: accessToken });
} else {
socket.emit('sendPlayerToken', { token: 'Credentials are incorrect' });
}
});
}
static playerRegister(socket, io) {
socket.on('playerRegister', async (data) => {
const safePassword = await Hash.make(data.password)
const user = new User()
user.username = data.username
user.email = data.email
user.password = safePassword
await user.save()
socket.emit('sendPlayerRegister', { success: true });
});
}
}

问候,

玉米

如下所述:

https://github.com/adonisjs/core/discussions/2051?sort=new#discussioncomment-274111

您可以使用API保护,并使用M4gie答案中的代码进行身份验证。

您只需要使用yarn add crypto安装加密包,如果您不想创建显示套接字错误的对象,只需将其转换为字符串:throw new Error('SocketErrors:MissingParameter')

最新更新