Как снять скобки в заявке на электронную почту из Azure AD B2C
Я пытаюсь снять скобки в email
утверждает, что я получаю от Azure AD B2C.
После того, как пользователь войдет в систему, я расшифрую токен пользователя и получу от него письмо. Но полученное письмо содержит скобки. Письмо выглядит так ["email@email.com"]
что делает его уродливым, когда я сохраняю его в базе данных.
Существуют ли какие-либо настройки для удаления скобок из заявки по электронной почте?
JObject ParseIdToken(string idToken)
{
// Get the piece with actual user info
idToken = idToken.Split('.')[1];
idToken = Base64UrlDecode(idToken);
return JObject.Parse(idToken);
}
private string Base64UrlDecode(string s)
{
s = s.Replace('-', '+').Replace('_', '/');
s = s.PadRight(s.Length + (4 - s.Length % 4) % 4, '=');
var byteArray = Convert.FromBase64String(s);
var decoded = Encoding.UTF8.GetString(byteArray, 0, byteArray.Count());
return decoded;
}
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers
{
FullName = user["name"]?.ToString(),
Email = user["emails"]?.ToString()
};
BlobCache.LocalMachine.InsertObject("usercached", cache);
}
Это мой код для получения электронного письма. Почему в письме есть скобки? Думаю, проблема не в моем коде, но, возможно, в Azure AD B2C есть какая-то настройка, которая делает его таким, потому что, когда я пытаюсь декодировать токен из https://jwt.io/ он возвращает то же самое, письмо с квадратными скобками, Кто-нибудь испытывал это?
Вот полезная нагрузка от jwt.io
Вы можете увидеть разницу между именем и адресом электронной почты. В письме есть такие скобки [ ]
и я хочу знать, как снять эти скобки и сделать их похожими на названия. Потому что, когда я получаю электронное письмо в формах Xamarin, оно тоже содержит эти скобки, поэтому вместо emailname@gmail.com
это так ["emailname@gmail.com"]
1 ответ
В JSON скобки обозначают массивы. Смотрите эту базовую документацию по JSON Arrays.
Хотя пользователь не может легко раскрыть его через пользовательский интерфейс Azure AD B2C, технически возможно, чтобы пользователь имел несколько электронных писем, связанных с его учетной записью, поэтому требование электронной почты является массивом.
Причина, по которой вы видите строку, отображается как ["user@email.com"]
потому что ты звонишь .ToString()
в массиве JSON. Вам нужно изменить свой код, чтобы получить конкретный элемент этого массива, например, первый элемент:
public void CacheUser(AuthenticationResult ar)
{
JObject user = ParseIdToken(ar.IdToken);
var cache = new CachedUsers
{
FullName = user["name"]?.ToString(),
Email = user["emails"]?.FirstOrDefault()?.ToString()
};
BlobCache.LocalMachine.InsertObject("usercached", cache);
}