Merge pull request #12111 from zhongwencool/fix-token-not-found

fix: use sync_transaction when update admin/token
This commit is contained in:
zhongwencool 2023-12-07 09:56:20 +08:00 committed by GitHub
commit 253ea6093a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 14 additions and 9 deletions

View File

@ -114,7 +114,7 @@ add_user(Username, Password, Role, Desc) when is_binary(Username), is_binary(Pas
end.
do_add_user(Username, Password, Role, Desc) ->
Res = mria:transaction(?DASHBOARD_SHARD, fun add_user_/4, [Username, Password, Role, Desc]),
Res = mria:sync_transaction(?DASHBOARD_SHARD, fun add_user_/4, [Username, Password, Role, Desc]),
return(Res).
%% 0-9 or A-Z or a-z or $_
@ -191,7 +191,7 @@ force_add_user(Username, Password, Role, Desc) ->
description = Desc
})
end,
case mria:transaction(?DASHBOARD_SHARD, AddFun) of
case mria:sync_transaction(?DASHBOARD_SHARD, AddFun) of
{atomic, ok} -> ok;
{aborted, Reason} -> {error, Reason}
end.
@ -227,7 +227,7 @@ remove_user(Username) ->
_ -> mnesia:delete({?ADMIN, Username})
end
end,
case return(mria:transaction(?DASHBOARD_SHARD, Trans)) of
case return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)) of
{ok, Result} ->
_ = emqx_dashboard_token:destroy_by_username(Username),
{ok, Result};
@ -242,7 +242,11 @@ update_user(Username, Role, Desc) ->
ok ->
case
return(
mria:transaction(?DASHBOARD_SHARD, fun update_user_/3, [Username, Role, Desc])
mria:sync_transaction(
?DASHBOARD_SHARD,
fun update_user_/3,
[Username, Role, Desc]
)
)
of
{ok, {true, Result}} ->
@ -324,7 +328,7 @@ update_pwd(Username, Fun) ->
end,
mnesia:write(Fun(User))
end,
return(mria:transaction(?DASHBOARD_SHARD, Trans)).
return(mria:sync_transaction(?DASHBOARD_SHARD, Trans)).
-spec lookup_user(dashboard_username()) -> [emqx_admin()].
lookup_user(Username) ->

View File

@ -119,7 +119,7 @@ do_sign(#?ADMIN{username = Username} = User, Password) ->
{_, Token} = jose_jws:compact(Signed),
Role = emqx_dashboard_admin:role(User),
JWTRec = format(Token, Username, Role, ExpTime),
_ = mria:transaction(?DASHBOARD_SHARD, fun mnesia:write/1, [JWTRec]),
_ = mria:sync_transaction(?DASHBOARD_SHARD, fun mnesia:write/1, [JWTRec]),
{ok, Role, Token}.
-spec do_verify(_, Token :: binary()) ->
@ -141,7 +141,7 @@ do_verify(Req, Token) ->
do_destroy(Token) ->
Fun = fun mnesia:delete/1,
{atomic, ok} = mria:transaction(?DASHBOARD_SHARD, Fun, [{?TAB, Token}]),
{atomic, ok} = mria:sync_transaction(?DASHBOARD_SHARD, Fun, [{?TAB, Token}]),
ok.
do_destroy_by_username(Username) ->
@ -266,7 +266,7 @@ check_rbac(_Req, JWT) ->
save_new_jwt(OldJWT) ->
#?ADMIN_JWT{exptime = _ExpTime, extra = _Extra, username = Username} = OldJWT,
NewJWT = OldJWT#?ADMIN_JWT{exptime = jwt_expiration_time()},
{atomic, Res} = mria:transaction(
{atomic, Res} = mria:sync_transaction(
?DASHBOARD_SHARD,
fun mnesia:write/1,
[NewJWT]

View File

@ -338,7 +338,7 @@ generate_unique_name(NamePrefix, ApiKey) ->
<<NamePrefix/binary, (hash_string_from_seed(ApiKey, ?DEFAULT_HASH_LEN))/binary>>.
trans(Fun, Args) ->
case mria:transaction(?COMMON_SHARD, Fun, Args) of
case mria:sync_transaction(?COMMON_SHARD, Fun, Args) of
{atomic, Res} -> {ok, Res};
{aborted, Error} -> {error, Error}
end.

View File

@ -0,0 +1 @@
Fix an issue where API tokens were sometimes unavailable by using sync_transaction function to ensure all updates are consistently synchronized to the replica node.