1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

firebase authで投稿した本人かどうかを判別する

Last updated at Posted at 2024-09-15

はじめに

認証にFirebase Auth、DBにsupabaseを利用したアプリで投稿した本人だけが削除や編集などの処理を行えるようにする方法を書いていきます。(ライブラリはReactです)

手順

firebase authでなくても似たような処理になるかと思います。

① Firebase Authから今ログインしているユーザーのユーザーIDを取得
② 何かをDBに追加する際(例えばTODO)に一緒にユーザーIDもDBに入れる
③ もし今ログインしているユーザーIDと投稿に紐ずくユーザーIDが同じなら処理できるようにする

前提としてfirebase authでの認証処理は実装済みでDBにはsupabaseを利用しているものとします。今回は簡単にTODOっぽいアプリで見ていきます。

1. firebase authで現在ログインしているユーザーのIDを取得

App.tsx
import React from 'react';
import { getAuth } from 'firebase/auth';

const App = () => {
  // firebase authで現在ログインしているユーザーのIDを取得
  const auth = getAuth();
  const currentUserId = auth.currentUser?.uid;

  return (
    {/* 省略 */}
  );
};

export default App;

2. TODOを追加する際に一緒に現在のユーザーidも入れる

TODOのタイトル、詳細と一緒にuser_idもDBに入れます。supabaseでの関数でいうと以下のようになるかと思います。

supabasefunctions.ts
export const addTodo = async (title:string,description: string,user_id: string) => {
    await supabase.from("TODO").insert({title,description,user_id})
}

3. もし今ログインしているユーザーIDとTODOに紐ずくユーザーIDが同じなら削除等のボタンを表示させる

先ほどのApp.jsxにTODOのコードを追加します。

App.tsx
import React from 'react';
import { getAuth } from 'firebase/auth';

const App = () => {
  const [todos, setTodos] = useState([]);
  
  // Firebase authで現在ログインしているユーザーのIDを取得
  const auth = getAuth();
  const currentUserId = auth.currentUser?.uid;

  // supabaseのDBからTODO表示、追加、削除の関数も記述(今回は省略)

  return (
    <div>
      <ul>
        {todos.map((todo, index) => (
          <li key={todo.id}>
            <p>{todo.title}</p>: {todo.description}
            {/* todo追加の際のuser_idと現在ログインしているuser_idが同じなら
                    削除ボタンを表示する */}
            {todo.userId === currentUserId && (
              <button 
                onClick={() => onClickDeleteTodo(todo.id)} 
              >
                削除
              </button>
            )}
          </li>
        ))}
      </ul>
    </div>
  );
};

export default App;

詳細にTODOアプリのコードを記述するとかなり長くなってしまうので、今回は省略しました。

おわりに

自分だけでなく複数のユーザーが使うアプリになると結構必要になる気がします。supabaseの認証機能もいつか使ってみたいです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?