Closed notwo closed 11 months ago
DRFにユーザ登録用のエンドポイントを追加しておいて、auth0から呼び出す syncUserRegistrationという名前でActionsを追加し、auth0のDBにユーザが登録された後に自動でDRFにユーザ登録させる
特にDRF側の修正なしでいけた DRF側のログは以下
[11/Dec/2023 08:16:45] "GET /api/users/?sub=auth0|657646cc1b69345b9279ead2 HTTP/1.1" 200 2
[11/Dec/2023 08:16:45] "OPTIONS /api/users/ HTTP/1.1" 200 0
[11/Dec/2023 08:16:45] "POST /api/users/ HTTP/1.1" 201 139
const axios = require("axios");
/**
* Handler that will be called during the execution of a PostUserRegistration flow.
*
* @param {Event} event - Details about the context and user that has registered.
* @param {PostUserRegistrationAPI} api - Methods and utilities to help change the behavior after a signup.
*/
exports.onExecutePostUserRegistration = async (event, api) => {
await axios.post("https://you-know-j3fh.onrender.com/api/users", { params:
{
username: event.user.nickname,
email: event.user.email,
sub: event.user.user_id
}}
);
};
上記は実際には行われておらず、Top.vueの以下コードが実行されていただけだった
const api = userApi();
const registerUser = async () => {
const requestParam: UserRequest = {
sub: user.value.sub,
username: user.value.nickname,
email: user.value.email,
//email_verified: user.value.email_verified,
//picture: user.value.picture,
};
axios.post(api.createUrl(), requestParam)
.then((response: AxiosResponse) => {
})
.catch((e: AxiosError<ErrorResponse>) => {
// 何かしらエラーが起きてアカウント登録できていないため、アラート表記の上ログアウトさせる
logout();
alert('アカウント登録時に異常が発生しました。お手数ですが、しばらく経ってから再度お試しください。');
});
};
const registerOrUpdate = async () => {
const response = await axios.get<UserResponse>(api.detailUrl(user.value.sub));
if (response.data.length === 0) {
registerUser();
}
};
registerOrUpdate();
Actionsを使わなくとも上記で対応できそうなので、一旦その方向でやってみる Actionsは削除しておく
post user registrationのevent.userからアクセスできるメンバ変数のうち、name, nickname, usernameはundefinedになってしまう こちらのDBのusernameにはemailの@から前を動的に切り取る形でActionsに追記して対処する
const axios = require("axios");
/**
* Handler that will be called during the execution of a PostUserRegistration flow.
*
* @param {Event} event - Details about the context and user that has registered.
* @param {PostUserRegistrationAPI} api - Methods and utilities to help change the behavior after a signup.
*/
exports.onExecutePostUserRegistration = async (event, api) => {
await axios.post("https://you-know-j3fh.onrender.com/api/users/",
{
username: String(event.user.email).split('@')[0],
email: event.user.email,
sub: event.user.user_id
}
);
};
現状、Actions経由で自動で自分のDBにユーザ登録させるまでは出来たが、肝心のログインが出来ていない 左ペインApplicationsのCredentialsタブのAuthentication Methods欄がデフォルトのClient Secret (Post)になっているが、これがNoneだと動く このあたりの挙動について参考になりそうなのが
そもそも、SettingsタブのApplication PropertiesをSingle Page Applicationに変えたら自動でAuthentication MethodsがNoneになった。設定を変えれば解決した
Post User Registration Flow が使えそうなので、Actionから追加してみる
追加方法