mirror of
https://github.com/status-im/realm-js.git
synced 2025-01-27 14:54:55 +00:00
* When refreshing the token, look up the user in a way that doesn't suffer from #1586 Expose a means of looking up a user by identity and server to avoid problems if the same user identity exists for multiple servers, which can happen when connecting to the same server via different hostnames. * Return undefined if the user doesn't exist rather than returning an object wrapping a null SyncUser.
This commit is contained in:
parent
ce67446976
commit
cd8db46aa7
@ -10,7 +10,9 @@ X.Y.Z Release notes
|
|||||||
* [Object Server] Added JWT authenfication (#1548).
|
* [Object Server] Added JWT authenfication (#1548).
|
||||||
|
|
||||||
### Bug fixes
|
### Bug fixes
|
||||||
* Fixed a bug where `Realm.open` could unexpectedly raise a "Realm at path ... already opened with different schema version" error.
|
* Fix a bug where `Realm.open` could unexpectedly raise a "Realm at path ... already opened with different schema version" error.
|
||||||
|
* Increased request timeout for token refresh requests to 10 seconds. This
|
||||||
|
should help with failing token refreshes on a loaded server (#1586).
|
||||||
* Increased request timeout for token refresh requests to 10 seconds. This should help with failing token refreshes on a loaded server.
|
* Increased request timeout for token refresh requests to 10 seconds. This should help with failing token refreshes on a loaded server.
|
||||||
|
|
||||||
### Internal
|
### Internal
|
||||||
|
@ -138,7 +138,7 @@ function refreshAccessToken(user, localRealmPath, realmUrl) {
|
|||||||
// Look up a fresh instance of the user.
|
// Look up a fresh instance of the user.
|
||||||
// We do this because in React Native Remote Debugging
|
// We do this because in React Native Remote Debugging
|
||||||
// `Realm.clearTestState()` will have invalidated the user object
|
// `Realm.clearTestState()` will have invalidated the user object
|
||||||
const newUser = user.constructor.all[user.identity];
|
let newUser = user.constructor._getExistingUser(user.server, user.identity);
|
||||||
if (!newUser) {
|
if (!newUser) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -59,6 +59,7 @@ class UserClass : public ClassDefinition<T, SharedUser> {
|
|||||||
using Value = js::Value<T>;
|
using Value = js::Value<T>;
|
||||||
using Function = js::Function<T>;
|
using Function = js::Function<T>;
|
||||||
using ReturnValue = js::ReturnValue<T>;
|
using ReturnValue = js::ReturnValue<T>;
|
||||||
|
using Arguments = js::Arguments<T>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::string const name = "User";
|
std::string const name = "User";
|
||||||
@ -81,10 +82,12 @@ public:
|
|||||||
|
|
||||||
static void create_user(ContextType, FunctionType, ObjectType, size_t, const ValueType[], ReturnValue &);
|
static void create_user(ContextType, FunctionType, ObjectType, size_t, const ValueType[], ReturnValue &);
|
||||||
static void admin_user(ContextType, FunctionType, ObjectType, size_t, const ValueType[], ReturnValue &);
|
static void admin_user(ContextType, FunctionType, ObjectType, size_t, const ValueType[], ReturnValue &);
|
||||||
|
static void get_existing_user(ContextType, ObjectType, Arguments, ReturnValue&);
|
||||||
|
|
||||||
MethodMap<T> const static_methods = {
|
MethodMap<T> const static_methods = {
|
||||||
{"createUser", wrap<create_user>},
|
{"createUser", wrap<create_user>},
|
||||||
{"_adminUser", wrap<admin_user>}
|
{"_adminUser", wrap<admin_user>},
|
||||||
|
{"_getExistingUser", wrap<get_existing_user>},
|
||||||
};
|
};
|
||||||
|
|
||||||
/*static void current_user(ContextType ctx, ObjectType object, ReturnValue &return_value);*/
|
/*static void current_user(ContextType ctx, ObjectType object, ReturnValue &return_value);*/
|
||||||
@ -160,6 +163,16 @@ void UserClass<T>::admin_user(ContextType ctx, FunctionType, ObjectType this_obj
|
|||||||
return_value.set(create_object<T, UserClass<T>>(ctx, user));
|
return_value.set(create_object<T, UserClass<T>>(ctx, user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void UserClass<T>::get_existing_user(ContextType ctx, ObjectType, Arguments arguments, ReturnValue& return_value) {
|
||||||
|
arguments.validate_count(2);
|
||||||
|
if (auto user = syncManagerShared().get_existing_logged_in_user(SyncUserIdentifier{
|
||||||
|
Value::validated_to_string(ctx, arguments[1], "identity"),
|
||||||
|
Value::validated_to_string(ctx, arguments[0], "authServerUrl")})) {
|
||||||
|
return_value.set(create_object<T, UserClass<T>>(ctx, new SharedUser(std::move(user))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &return_value) {
|
void UserClass<T>::all_users(ContextType ctx, ObjectType object, ReturnValue &return_value) {
|
||||||
auto users = Object::create_empty(ctx);
|
auto users = Object::create_empty(ctx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user