Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Link User Accounts Based on Common/Matching Auth-Id(email)#566

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
FalkWolsky merged 4 commits intodevfromfix-oauth-issues
Dec 7, 2023
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,4 +18,5 @@ public interface UserRepository extends ReactiveMongoRepository<User, String> {

Flux<User> findByConnections_SourceAndConnections_RawIdIn(String source, Collection<String> rawIds);

Mono<User> findByName(String rawUuid);
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -32,14 +32,18 @@ public interface UserService {

Mono<Boolean> bindEmail(User user, String email);

Mono<User> findByAuthUser(AuthUser authUser);
Mono<User> findByAuthUserSourceAndRawId(AuthUser authUser);

Mono<User> findByAuthUserRawId(AuthUser authUser);

Mono<User> createNewUserByAuthUser(AuthUser authUser);

Mono<Void> getUserAvatar(ServerWebExchange exchange, String userId);

Mono<Boolean> addNewConnection(String userId, Connection connection);

Mono<User> addNewConnectionAndReturnUser(String userId, Connection connection);

Mono<Void> deleteProfilePhoto(User visitor);

Mono<Boolean> updatePassword(String userId, String oldPassword, String newPassword);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -111,6 +111,10 @@ public Mono<User> findBySourceAndId(String source, String sourceUuid) {
return repository.findByConnections_SourceAndConnections_RawId(source, sourceUuid);
}

public Mono<User> findByName(String rawUuid) {
return repository.findByName(rawUuid);
}

@Override
public Mono<Boolean> saveProfilePhoto(Part filePart, User user) {
String prevAvatar = ObjectUtils.defaultIfNull(user.getAvatar(), "");
Expand DownExpand Up@@ -143,10 +147,15 @@ public Mono<User> update(String id, User updatedUser) {
}

@Override
public Mono<User>findByAuthUser(AuthUser authUser) {
public Mono<User>findByAuthUserSourceAndRawId(AuthUser authUser) {
return findBySourceAndId(authUser.getSource(), authUser.getUid());
}

@Override
public Mono<User> findByAuthUserRawId(AuthUser authUser) {
return findByName(authUser.getUsername());
}

@Override
public Mono<User> createNewUserByAuthUser(AuthUser authUser) {
User newUser = new User();
Expand DownExpand Up@@ -198,6 +207,13 @@ public Mono<Boolean> addNewConnection(String userId, Connection connection) {
.then(Mono.just(true));
}

@Override
public Mono<User> addNewConnectionAndReturnUser(String userId, Connection connection) {
return findById(userId)
.doOnNext(user -> user.getConnections().add(connection))
.flatMap(repository::save);
}

@Override
public Mono<Void> deleteProfilePhoto(User visitor) {
String userAvatar = visitor.getAvatar();
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -116,7 +116,7 @@ protected Mono<AuthUser> getAuthUser(AuthToken authToken) {
}
AuthUserauthUser =AuthUser.builder()
.uid(MapUtils.getString(map,"sub"))
.username(MapUtils.getString(map,"name"))
.username(MapUtils.getString(map,"email"))
.rawUserInfo(map)
.build();
returnMono.just(authUser);
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -161,14 +161,26 @@ public Mono<Void> loginOrRegister(AuthUser authUser, ServerWebExchange exchange,
}

private Mono<User> updateOrCreateUser(AuthUser authUser) {
return findByAuthUser(authUser)
.flatMap(findByAuthUser -> {
if (findByAuthUser.userExist()) {
User user = findByAuthUser.user();
return findByAuthUserSourceAndRawId(authUser).zipWith(findByAuthUserRawId(authUser))
.flatMap(tuple -> {

FindByAuthUser findByAuthUserFirst = tuple.getT1();
FindByAuthUser findByAuthUserSecond = tuple.getT2();

// If the user is found for the same auth source and id, just update the connection
if (findByAuthUserFirst.userExist()) {
User user = findByAuthUserFirst.user();
updateConnection(authUser, user);
return userService.update(user.getId(), user);
}

//If the user connection is not found with login id, but the user is
// found for the same id in some different connection, then just add a new connection to the user
if(findByAuthUserSecond.userExist()) {
User user = findByAuthUserSecond.user();
return userService.addNewConnectionAndReturnUser(user.getId(), authUser.toAuthConnection());
}

// if the user is logging/registering via OAuth provider for the first time,
// but is not anonymous, then just add a new connection

Expand All@@ -189,8 +201,14 @@ private Mono<User> updateOrCreateUser(AuthUser authUser) {
});
}

protected Mono<FindByAuthUser> findByAuthUser(AuthUser authUser) {
return userService.findByAuthUser(authUser)
protected Mono<FindByAuthUser> findByAuthUserSourceAndRawId(AuthUser authUser) {
return userService.findByAuthUserSourceAndRawId(authUser)
.map(user -> new FindByAuthUser(true, user))
.defaultIfEmpty(new FindByAuthUser(false, null));
}

protected Mono<FindByAuthUser> findByAuthUserRawId(AuthUser authUser) {
return userService.findByAuthUserRawId(authUser)
.map(user -> new FindByAuthUser(true, user))
.defaultIfEmpty(new FindByAuthUser(false, null));
}
Expand Down

[8]ページ先頭

©2009-2025 Movatter.jp