| | |
| | | |
| | | export async function login(_params) { |
| | | const res = await request.post('/login', _params); |
| | | if (res.data.code === 200) { |
| | | return res.data.data; |
| | | } |
| | | return Promise.reject(new Error(res.data.msg)); |
| | | return res.data; |
| | | } |
| | | |
| | | export async function register(_params) { |
| | |
| | | const AuthProvider = { |
| | | // login |
| | | login: async ({ username, password, tenantId }) => { |
| | | const { accessToken, user, tenant } = await login({ |
| | | const { code, msg, data } = await login({ |
| | | username: username, |
| | | password: password, |
| | | tenantId: tenantId, |
| | | }).catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }) |
| | | |
| | | if (code === 200) { |
| | | const { accessToken, user, tenant } = data; |
| | | if (user && accessToken) { |
| | | const userToPersist = { |
| | | avatar: avatar, |
| | |
| | | localStorage.setItem("user", JSON.stringify(userToPersist)); |
| | | return Promise.resolve(); |
| | | } |
| | | } |
| | | |
| | | return Promise.reject( |
| | | new HttpError("Unauthorized", 401, { |
| | | message: "Invalid username or password", |
| | | }), |
| | | ); |
| | | return Promise.reject({ code, msg, data }); |
| | | }, |
| | | // logout |
| | | logout: () => { |
| | |
| | | const location = useLocation(); |
| | | const { systemInfo, tenantList } = props; |
| | | |
| | | const { control, handleSubmit, watch, setValue, getValues } = useForm(); |
| | | const { control, handleSubmit, watch, setValue, getValues, setError, clearErrors } = useForm(); |
| | | |
| | | const [loading, setLoading] = useState(false); |
| | | const [showPassword, setShowPassword] = useState(false); |
| | |
| | | login( |
| | | data, |
| | | location.state ? (location.state).nextPathname : '/' |
| | | ).catch((error) => { |
| | | ).catch((res) => { |
| | | setLoading(false); |
| | | notify( |
| | | typeof error === 'string' |
| | | ? error |
| | | : typeof error === 'undefined' || !error.message |
| | | ? 'ra.auth.sign_in_error' |
| | | : error.message, |
| | | { |
| | | type: 'error', |
| | | messageArgs: { |
| | | _: |
| | | typeof error === 'string' |
| | | ? error |
| | | : error && error.message |
| | | ? error.message |
| | | : undefined, |
| | | }, |
| | | const { code, msg, data } = res; |
| | | if (code === 10003) { |
| | | setError('username', { |
| | | message: msg |
| | | }) |
| | | } else if (code === 10004) { |
| | | setError('username', { |
| | | message: msg |
| | | }) |
| | | } else if (code === 10001) { |
| | | setError('password', { |
| | | message: msg |
| | | }) |
| | | } else { |
| | | notify(msg, { type: 'error', messageArgs: { _: msg } }); |
| | | } |
| | | ); |
| | | }); |
| | | }; |
| | | |
| | |
| | | component="form" onSubmit={handleSubmit(onSubmit)} noValidate |
| | | > |
| | | <Stack spacing={2}> |
| | | <Controller |
| | | {/* <Controller |
| | | name="tenantId" |
| | | control={control} |
| | | rules={{ required: true }} |
| | |
| | | /> |
| | | ); |
| | | }} |
| | | /> |
| | | /> */} |
| | | |
| | | <Controller |
| | | name="username" |
| | | control={control} |
| | | defaultValue="" |
| | | rules={{ required: true }} |
| | | render={({ field }) => ( |
| | | render={({ field, fieldState: { error } }) => ( |
| | | <TextField |
| | | {...field} |
| | | label={translate("page.login.username")} |
| | |
| | | disabled={loading} |
| | | autoFocus |
| | | autoComplete="off" |
| | | error={!!error} |
| | | helperText={error?.message || ""} |
| | | /> |
| | | )} |
| | | /> |
| | |
| | | control={control} |
| | | defaultValue="" |
| | | rules={{ required: true }} |
| | | render={({ field }) => ( |
| | | render={({ field, fieldState: { error } }) => ( |
| | | <TextField |
| | | {...field} |
| | | label={translate("page.login.password")} |
| | |
| | | variant="standard" |
| | | disabled={loading} |
| | | autoComplete="off" |
| | | error={!!error} |
| | | helperText={error?.message || ""} |
| | | InputProps={{ |
| | | endAdornment: ( |
| | | <InputAdornment position="end"> |
| | |
| | | <Button |
| | | type="submit" |
| | | variant="contained" |
| | | disabled={loading || !(tenantId && username && password)} |
| | | disabled={loading || !(true && username && password)} |
| | | sx={{ |
| | | // backgroundColor: "#3D4BA7" |
| | | }} |
| | |
| | | |
| | | // register |
| | | const onSubmit = (params) => { |
| | | // console.log(params); |
| | | setLoading(true); |
| | | register(params).then(res => { |
| | | setLoading(false); |
| | | const { code, msg, data } = res; |
| | | if (code === 200) { |
| | | console.log(data); |
| | | notify(msg, { type: 'success', messageArgs: { _: msg } }); |
| | | // to login |
| | | login( |
| | | params, |
| | | location.state ? (location.state).nextPathname : '/' |
| | | ).catch(({ code, msg }) => { |
| | | setLoading(false); |
| | | notify(msg, { type: 'error', messageArgs: { _: msg } }); |
| | | }); |
| | | } else if (code === 10002) { |
| | | setError("username", { |
| | | message: msg |
| | |
| | | |
| | | public class BusinessRes implements BaseRes { |
| | | |
| | | public final static String INVALID_PASSWORD = "10001 - The Current Password Was Incorrect"; |
| | | public final static String INVALID_PASSWORD = "10001 - The current password was incorrect"; |
| | | |
| | | public final static String USERNAME_EXIST = "10002 - The username already exist"; |
| | | public final static String USERNAME_EXIST = "10002 - Username already exist"; |
| | | |
| | | public final static String USERNAME_NOT_EXIST = "10003 - Username doesn't exist"; |
| | | |
| | | public final static String USERNAME_FROZEN = "10004 - Account frozen"; |
| | | |
| | | } |
| | |
| | | package com.vincent.rsf.server.system.controller; |
| | | |
| | | import com.vincent.rsf.common.enums.SystemModeType; |
| | | import com.vincent.rsf.common.utils.Utils; |
| | | import com.vincent.rsf.framework.common.BaseRes; |
| | | import com.vincent.rsf.framework.common.Cools; |
| | |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 认证控制器 |
| | | * |
| | | * Authority Controller |
| | | * Created by vincent on 1/30/2024 |
| | | */ |
| | | @RestController |
| | |
| | | |
| | | @PostMapping("/login") |
| | | public R login(@RequestBody LoginParam param, HttpServletRequest request) { |
| | | // System.out.println(userService.encodePassword("123456")); |
| | | String username = param.getUsername(); |
| | | Long tenantId = param.getTenantId(); |
| | | User user = userService.getByUsername(username, tenantId); |
| | | User user = userService.getByUsername(username, null); |
| | | if (user == null) { |
| | | return R.error("Username Does Not Exist"); |
| | | return R.parse(BusinessRes.USERNAME_NOT_EXIST); |
| | | } |
| | | if (!user.getStatus().equals(StatusType.ENABLE.val)) { |
| | | return R.error("Account Frozen"); |
| | | return R.parse(BusinessRes.USERNAME_FROZEN); |
| | | } |
| | | if (!userService.comparePassword(user.getPassword(), param.getPassword())) { |
| | | return R.error("Invalid Password"); |
| | | return R.parse(BusinessRes.INVALID_PASSWORD); |
| | | } |
| | | String accessToken = JwtUtil.buildToken(new JwtSubject(username, user.getTenantId()), |
| | | configProperties.getTokenExpireTime(), configProperties.getTokenKey()); |
| | | userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request); |
| | | userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, user.getTenantId(), null, request); |
| | | Tenant tenant = tenantService.getById(user.getTenantId()); |
| | | return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName())); |
| | | } |
| | |
| | | return R.error("The verification code is incorrect."); |
| | | } |
| | | } |
| | | |
| | | // register |
| | | TenantInitParam initParam = new TenantInitParam(); |
| | | initParam.setEmail(param.getEmail()); |
| | |
| | | initParam.setPassword(param.getPassword()); |
| | | initParam.setName(param.getUsername()); |
| | | initParam.setFlag(param.getUsername()); |
| | | if (!tenantService.initTenant(initParam)) { |
| | | Long tenantId = tenantService.initTenant(initParam); |
| | | if (null == tenantId) { |
| | | throw new CoolException("Failed to register"); |
| | | } |
| | | |
| | | redisService.delete(EmailType.REGISTER_VERIFY.toString(), param.getEmail()); |
| | | return R.ok(); |
| | | // token |
| | | User user = userService.getByUsername(param.getUsername(), tenantId); |
| | | String accessToken = JwtUtil.buildToken(new JwtSubject(user.getUsername(), user.getTenantId()), |
| | | configProperties.getTokenExpireTime(), configProperties.getTokenKey()); |
| | | userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request); |
| | | Tenant tenant = tenantService.getById(user.getTenantId()); |
| | | return R.ok().add(new LoginResult(accessToken, user, tenant.getName())); |
| | | } |
| | | |
| | | @GetMapping("/system/info") |
| | | public R systemInfo() { |
| | | SystemModeType systemMode = configProperties.getSystemMode(); |
| | | SystemInfoVo infoVo = new SystemInfoVo(); |
| | | infoVo.setName(configProperties.getSystemName()); |
| | | infoVo.setVersion(configProperties.getSystemVersion()); |
| | | infoVo.setMode(systemMode.toString()); |
| | | infoVo.setMode(configProperties.getSystemMode().toString()); |
| | | return R.ok(infoVo); |
| | | } |
| | | |
| | |
| | | @PostMapping("/auth/reset/password") |
| | | public R resetPassword(@RequestBody UpdatePasswordParam param) { |
| | | if (Cools.isEmpty(param.getOldPassword(), param.getNewPassword())) { |
| | | return R.error("Parameters Cannot Be Empty"); |
| | | return R.parse(BaseRes.PARAM); |
| | | } |
| | | Long userId = getLoginUserId(); |
| | | if (userId == null) { |
| | |
| | | @OperationLog("Init Tenant") |
| | | @PostMapping("/tenant/init") |
| | | public R init(@RequestBody TenantInitParam param) { |
| | | return tenantService.initTenant(param) ? R.ok("Initialize Success") : R.parse(BaseRes.PARAM); |
| | | return null != tenantService.initTenant(param) ? R.ok("Initialize Success") : R.parse(BaseRes.PARAM); |
| | | } |
| | | |
| | | @PreAuthorize("hasAuthority('system:tenant:update')") |
| | |
| | | |
| | | private String password; |
| | | |
| | | private Long tenantId; |
| | | // private Long tenantId; |
| | | |
| | | } |
| | |
| | | |
| | | public interface TenantService extends IService<Tenant> { |
| | | |
| | | Boolean initTenant(TenantInitParam param); |
| | | Long initTenant(TenantInitParam param); |
| | | |
| | | } |
| | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public Boolean initTenant(TenantInitParam param) { |
| | | public Long initTenant(TenantInitParam param) { |
| | | // valid ---------------------------- |
| | | if (null == param) { |
| | | return false; |
| | | return null; |
| | | } |
| | | if (Cools.isEmpty(param.getName(), param.getFlag(), param.getUsername(), param.getPassword())) { |
| | | return false; |
| | | return null; |
| | | } |
| | | |
| | | if (null != userService.getByUsername(param.getUsername(), null)) { |
| | |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | return tenant.getId(); |
| | | } |
| | | |
| | | } |