Squid App に Auth0 を追加する
Auth0 authentication service (認証サービス) と統合して、Auth0 token (トークン) を使用し、サービスを保護します。
Squid で Auth0 を使用するには、まず Squid Console で Auth0 の統合を追加してください。手順については Setup guide を参照してください。
クライアントフレームワークを選択:
- React
- Angular
Follow the Auth0 instructions for React using this link
You will need to install the Auth0 React SDK:
npm install @auth0/auth0-react
Initialize the Auth0 provider:
Client code
import { Auth0Provider } from '@auth0/auth0-react';
import { SquidContextProvider } from '@squidcloud/react';
ReactDOM.createRoot(document.getElementById('root')).render(
<Auth0Provider
domain="YOUR_AUTH0_DOMAIN"
clientId="YOUR_AUTH0_CLIENT_ID"
authorizationParams={{
redirect_uri: window.location.origin,
audience: 'auth0-api-id', // Auth0 API (audience) ID used to issue an access token for calls to the backend.
}}
>
<SquidContextProvider
options={{
appId: 'YOUR_APP_ID',
region: 'YOUR_REGION', // example: 'us-east-1.aws'
}}
>
<App />
</SquidContextProvider>
</Auth0Provider>
);
Set the user's auth ID token:
Client code
import { useAuth0 } from '@auth0/auth0-react';
import { useSquid } from '@squidcloud/react';
function App() {
const { isLoading, user, getAccessTokenSilently } = useAuth0();
const { setAuthProvider } = useSquid();
useEffect(() => {
setAuthProvider({
integrationId: 'auth0_INTEGRATION_ID',
getToken: () => user && getAccessTokenSilently(),
});
}, [user, getAccessTokenSilently, setAuthProvider]);
if (isLoading) {
// Render your loading indicator.
return <span>Loading...</span>;
}
// Render your application
}
To make the user's authentication information available to backend functions, pass the Access Token to Squid:
Client code
squid.setAuthProvider({
getToken: () => 'USER_AUTH_ID_TOKEN',
integrationId: 'AUTH_INTEGRATION_ID',
});
The following is an example of how to access the authentication information on the backend:
Backend code
@secureCollection('users', 'read')
secureUsersRead(context: QueryContext<User>): boolean {
const userAuth = this.getUserAuth();
}
Follow the Auth0 instructions for Angular using this link
You will need to install the Auth0 Angular SDK:
npm install @auth0/auth0-angular
In src/app/app.module.ts
add the following snippets:
Client code
import { NgModule } from '@angular/core';
import { AuthModule, AuthService } from '@auth0/auth0-angular';
import { SquidModule } from '@squidcloud/angular';
import { Squid } from '@squidcloud/client';
@NgModule({
declarations: [
//...
],
imports: [
//...
AuthModule.forRoot({
domain: 'YOUR_AUTH0_DOMAIN',
clientId: 'YOUR_AUTH0_CLIENT_ID',
authorizationParams: {
redirect_uri: window.location.origin,
},
}),
SquidModule.forRoot({
appId: 'YOUR_APP_ID',
region: 'YOUR_REGION', // example: 'us-east-1.aws'
}),
],
providers: [
//...
],
//...
})
export class AppModule {
constructor(squid: Squid, authService: AuthService) {
squid.setAuthProvider({
integrationId: 'auth0_INTEGRATION_ID',
getToken: async (): Promise<string | undefined> => {
// Wait until the authentication state is resolved by Auth0.
const user = await firstValueFrom(auth0Service.user$);
// Try to get an access token without user interaction if there is an active user.
return user && auth0Service.getAccessTokenSilently();
},
});
}
}