mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 04:48:53 +00:00
refactor(server): auth (#5895)
Remove `next-auth` and implement our own Authorization/Authentication system from scratch.
## Server
- [x] tokens
- [x] function
- [x] encryption
- [x] AuthController
- [x] /api/auth/sign-in
- [x] /api/auth/sign-out
- [x] /api/auth/session
- [x] /api/auth/session (WE SUPPORT MULTI-ACCOUNT!)
- [x] OAuthPlugin
- [x] OAuthController
- [x] /oauth/login
- [x] /oauth/callback
- [x] Providers
- [x] Google
- [x] GitHub
## Client
- [x] useSession
- [x] cloudSignIn
- [x] cloudSignOut
## NOTE:
Tests will be adding in the future
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { useAFFiNEI18N } from '@affine/i18n/hooks';
|
||||
import type { FC } from 'react';
|
||||
|
||||
import { Button } from '../../ui/button';
|
||||
import { AuthPageContainer } from './auth-page-container';
|
||||
|
||||
export const ConfirmChangeEmail: FC<{
|
||||
onOpenAffine: () => void;
|
||||
}> = ({ onOpenAffine }) => {
|
||||
const t = useAFFiNEI18N();
|
||||
|
||||
return (
|
||||
<AuthPageContainer
|
||||
title={t['com.affine.auth.change.email.page.success.title']()}
|
||||
subtitle={t['com.affine.auth.change.email.page.success.subtitle']()}
|
||||
>
|
||||
<Button type="primary" size="large" onClick={onOpenAffine}>
|
||||
{t['com.affine.auth.open.affine']()}
|
||||
</Button>
|
||||
</AuthPageContainer>
|
||||
);
|
||||
};
|
||||
@@ -37,7 +37,7 @@ function getCallbackUrl(location: Location) {
|
||||
try {
|
||||
const url =
|
||||
location.state?.callbackURL ||
|
||||
new URLSearchParams(location.search).get('callbackUrl');
|
||||
new URLSearchParams(location.search).get('redirect_uri');
|
||||
if (typeof url === 'string' && url) {
|
||||
if (!url.startsWith('http:') && !url.startsWith('https:')) {
|
||||
return url;
|
||||
|
||||
@@ -3,4 +3,5 @@ export interface User {
|
||||
name: string;
|
||||
email: string;
|
||||
image?: string | null;
|
||||
avatarUrl: string | null;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import { SignOutIcon } from '@blocksuite/icons';
|
||||
import { Avatar } from '../../ui/avatar';
|
||||
import { Button, IconButton } from '../../ui/button';
|
||||
import { Tooltip } from '../../ui/tooltip';
|
||||
import type { User } from '../auth-components';
|
||||
import { NotFoundPattern } from './not-found-pattern';
|
||||
import {
|
||||
largeButtonEffect,
|
||||
@@ -12,11 +13,7 @@ import {
|
||||
} from './styles.css';
|
||||
|
||||
export interface NotFoundPageProps {
|
||||
user: {
|
||||
name: string;
|
||||
email: string;
|
||||
avatar: string;
|
||||
} | null;
|
||||
user?: User | null;
|
||||
onBack: () => void;
|
||||
onSignOut: () => void;
|
||||
}
|
||||
@@ -47,7 +44,7 @@ export const NotFoundPage = ({
|
||||
|
||||
{user ? (
|
||||
<div className={wrapper}>
|
||||
<Avatar url={user.avatar} name={user.name} />
|
||||
<Avatar url={user.avatarUrl ?? user.image} name={user.name} />
|
||||
<span style={{ margin: '0 12px' }}>{user.email}</span>
|
||||
<Tooltip content={t['404.signOut']()}>
|
||||
<IconButton onClick={onSignOut}>
|
||||
|
||||
Reference in New Issue
Block a user