Browse Source

1.修正了获取WebSocket上下文的功能

2.实现了二次认证的功能
pull/337/head
allanwei 3 years ago
parent
commit
1fd721f401
2 changed files with 34 additions and 3 deletions
  1. +11
    -1
      messaging/Contexts.go
  2. +23
    -2
      messaging/messaging.go

+ 11
- 1
messaging/Contexts.go View File

@ -10,6 +10,7 @@ type Contexts struct {
connections map[string]*neffos.NSConn
callbacksOfAdd []func(string, *neffos.NSConn)
callbacksOfRemove []func(string)
authenticator func(map[string]string) (string, error)
}
func newContexts() *Contexts {
@ -41,7 +42,12 @@ func (contexts *Contexts) remove(id string) {
func (contexts *Contexts) Get(id string) *neffos.NSConn {
locker.RLock()
defer locker.RUnlock()
return contexts.connections[id]
connection, ok := contexts.connections[id]
if ok {
return connection
} else {
return nil
}
}
func (contexts *Contexts) OnAdd(callback func(string, *neffos.NSConn)) {
@ -55,3 +61,7 @@ func (contexts *Contexts) OnRemove(callback func(string)) {
defer locker.Unlock()
contexts.callbacksOfRemove = append(contexts.callbacksOfRemove, callback)
}
func (contexts *Contexts) SetAuthenticator(authenticator func(map[string]string) (string, error)) {
contexts.authenticator = authenticator
}

+ 23
- 2
messaging/messaging.go View File

@ -1,6 +1,7 @@
package messaging
import (
"encoding/json"
"fmt"
gorilla_websocket "github.com/gorilla/websocket"
"github.com/kataras/iris/v12/core/router"
@ -32,8 +33,28 @@ func Register(namespaceName string, eventMapping neffos.Events) *Contexts {
return nil
}
eventMapping["login"] = func(connection *neffos.NSConn, message neffos.Message) error {
fmt.Println("login:" + string(message.Body))
contexts.add(connection.Conn.ID(), connection)
var headers map[string]string
if err := json.Unmarshal(message.Body, &headers); err != nil {
panic(err)
}
token, ok := headers["token"]
if !ok {
jsonText, _ := json.Marshal(map[string]string{"err": "未找到token!"})
connection.Emit("onLogin", jsonText)
return nil
}
delete(headers, "token")
fmt.Println(token)
id := connection.Conn.ID() // Todo 需要根据 token 解析出 user id
if contexts.authenticator != nil {
var err error
id, err = contexts.authenticator(headers)
if err != nil {
jsonText, _ := json.Marshal(map[string]string{"err": err.Error()})
connection.Emit("onLogin", jsonText)
}
}
contexts.add(id, connection)
connection.Emit("onLogin", []byte{})
return nil
}


Loading…
Cancel
Save