質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

712閲覧

ログイン/ログアウトの切替をNext.js 13で実施する方法について

koala_beginner

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2023/09/10 05:46

実現したいこと

Next.js 13でログイン/ログアウトの切替を以下の手順で行いたい。

➀ App/page.tsxで状態変数をbooleanで定義
➁ ➀をpropsとしてNavBar.tsx → login/page.tsx, logout/page.tsxの順に渡す
➂ login/page.tsx, logout/page.tsxにて、更新関数で真偽値を反転
➃ NavBar.tsxにて、ログイン時はLOGOUTを、ログアウト時はLOGINを表示させる

前提

■ 現在のディレクトリ構成(App Routerを使用)

// 構成図 App/ ├─ components/ │ └─ NavBar.tsx ├─ data │ └─ FireBase.ts ├─ pages │ ├─ createpost │ │ └─ page.tsx │ ├─ login │ │ └─ page.tsx │ └─ logout │ └─ page.tsx ├─ styles ├─ layout.tsx └─ page.tsx

質問

ナビゲーションバーにおいて、ログイン時はLOGOUTが、
ログアウト時はLOGINが表示される状態を作りたい。

発生している問題・エラーメッセージ

Next.jsのLinkを使用する場合、NavBar.tsxからlogin/page.tsxに変数をpropsとして渡すことができず、どのように変数を更新すれば良いかが分からずにいます。

該当のソースコード

typescript

1// App/page.tsx 2const App = () => { 3// isAuthで状態変数としてログイン情報を保持し、propsで渡したい 4// const [isAuth, setIsAuth] = useState(false); 5 return ( 6 <div className="app"> 7 <style jsx>{styles}</style> 8 <NavBar /> 9 </div> 10 ); 11}; 12 13export default App;

typescript

1// NavBar.tsx 2interface isAuthProps { 3 isAuth: boolean; 4} 5 6const NavBar = () => { 7 const [isAuth, setIsAuth] = useState(false); 8 9 // だが、受け取ったpropsをloginとlogoutに受け流すことができない 10 // コンポーネントを記載できないため 11 return ( 12 <> 13 <style jsx>{styles}</style> 14 <nav className='app-nav'> 15 <Link href='/pages/home ' className='app-nav-item'> 16 <FontAwesomeIcon color='#fff' icon={faHouse} /> 17 <p className='app-nav-item-text'>HOME</p> 18 </Link> 19 <Link href='/pages/createpost' className='app-nav-item'> 20 <FontAwesomeIcon color='#fff' icon={faFilePen} /> 21 <p className='app-nav-item-text'>POST</p> 22 </Link> 23 {!isAuth ? ( 24 <Link href='/pages/login' className='app-nav-item'> 25 <FontAwesomeIcon color='#fff' icon={faArrowRightToBracket} /> 26 <p className='app-nav-item-text'>LOGIN</p> 27 </Link> 28 ) : ( 29 <Link href='/pages/logout' className='app-nav-item'> 30 <FontAwesomeIcon color='#fff' icon={faArrowRightToBracket} /> 31 <p className='app-nav-item-text'>LOGOUT</p> 32 </Link> 33 )} 34 </nav> 35 </> 36 ); 37}; 38 39export default NavBar;

試したこと

Next.jsのドキュメントを参照

補足情報(FW/ツールのバージョンなど)

Next.js 13を使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

https://reffect.co.jp/react/react-firebase-auth/#%E3%83%A6%E3%83%BC%E3%82%B6%E6%83%85%E5%A0%B1%E3%81%AE%E5%85%B1%E6%9C%89context

この記事に従って、Context を使ってログイン済みかどうかの状態を読み取れるようにする(onAuthStateChanged を通事で、変更があったときには更新してくれます。)のが良いと思います。

App Router を使っているようなので、app/layout.tsx で AuthProvider を使うことになると思います。

投稿2023/09/16 07:56

編集2023/09/16 08:03
honey32

総合スコア246

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問