我正在使用Unity Free + NodeJS与我的队友编写一个小项目。
服务器的NodeJs和客户端的Unity。
如果您输入了有效的登录数据,服务器将使用njwt返回一个jwt,可以使用各种在线工具和c#进行解码。
但是,这行:byte[] _dec = Convert.FromBase64String(part);
不会返回错误,但也会阻止执行更多代码。我不知道为什么。
以下是更多样本,以了解正在发生的事情。
LoginMenu.cs
ws.OnMessage += (sender, e) => {
JObject res = JObject.Parse(e.Data);
switch ((string)res["type"])
{
// If we get a token from the server
// login was successful
case "jwt":
Debug.Log("Res was JWT");
UserAccountManager.instance.LogIn((string)res["jwt"]);
Debug.LogWarning("FINISHED");
break;
// Only 1 case for now
}
};
UserAccountManager.cs
public static UserAccountManager instance;
void Awake() {
if (instance != null)
{
Destroy(gameObject);
return;
}
instance = this;
DontDestroyOnLoad(this);
}
void Set_Jwt(string _jwt)
{
Jwt = _jwt;
Jwt_data = decode_jwt(_jwt);
playerUsername = (string)Jwt_data["username"];
Debug.Log("Jwt set");
Debug.LogWarning(playerUsername);
}
private JObject decode_jwt(string _jwt)
{
string[] splitted = _jwt.Split('.');
var part = splitted[1];
// Code only runs until here
byte[] _dec = Convert.FromBase64String(part);
string decodedjwt = Encoding.UTF8.GetString(_dec);
return JObject.Parse(decodedjwt);
}
public void LogIn(string _jwt) {
Debug.LogWarning("LogIn called");
Set_Jwt(_jwt);
isLoggedIn = true;
Debug.Log("Trying to load " + loggedInSceneName);
SceneManager.LoadScene(loggedInSceneName);
}
编辑:
我在新的C#ConsoleApplication中编写了几乎相同的代码,它抛出了一个System.FormatException:“base64 Char数组的长度无效”
static void Main(string[] args)
{
string jwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJncy5hd2Vzb21lc3R1ZmYuYXQiLCJpYXQiOjE1MTA1OTkyNzQsImV4cCI6MTUxMDYwMjg3MywidWlkIjoiMTY1ZWMxZjAtYzhhNC0xMWU3LTk2ZWQtYzNjNGQ4NTRmM2I4IiwiYXV0aCI6dHJ1ZSwidXNlcm5hbWUiOiJnYWJlbml6aGVyZSIsImlwIjoiMTk0LjIwOC4xMzguMTI4IiwianRpIjoiNjg4NWM0N2YtMjk3NS00N2MyLTgzYTktN2RmMjhmODE3NDljIn0.tRhx3mUbGBxoGFFr0t6dnPMrdlUT4UKJKLBY_9IiJdBePWp1S10Z91875z6OFK92ymACRR_wO3_1_h6fKXAPTQ";
string[] splitted = jwt.Split('.');
var part = splitted[1];
byte[] arr = Convert.FromBase64String(part);
string res = Encoding.UTF8.GetString(arr);
Console.WriteLine(res);
Console.Read();
}
我现在该怎么办?
答案 0 :(得分:0)
我终于修好了。这是一个非常小的错误。整个令牌是正确的b64,但是当我分开中间部分时,它可以被4分割。我添加了一个=
然后它解码得很好。