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

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

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

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

Next.js

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

React.js

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

Q&A

0回答

1952閲覧

firebase authでログイン後画面遷移をしたい

maskmelon

総合スコア63

Firebase

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

Next.js

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

React.js

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

0グッド

0クリップ

投稿2020/10/21 05:06

編集2020/10/21 05:08

###実現したいこと
Next.jsでアプリを作っており、認証にfirebase authのTwitterログインを使っています。ログイン後にユーザーのダッシュボードページに移動するようにしたいのですが、うまく行きません。

###試してみたこと
firebase.auth().onAuthStateChanged()内部で画面遷移の処理を書いた。
next/routerではなくwindow.location.hrefで記述した。

いずれも変わりませんでした。

特にエラーは出ていません。元いたページのままログイン状態が変化します。

原因がわかるかたいらっしゃいましたらご教授頂けるとありがたいです。

###該当のコード
ログイン処理

js

1export function useAuthentication() { 2 const [currentUser, setCurrentUser] = useRecoilState(currentUserState); 3 4 const login = async () => { 5 const provider = new firebase.auth.TwitterAuthProvider(); 6 await firebase 7 .auth() 8 .signInWithPopup(provider) 9 .then(async userCredential => { 10 console.log(userCredential); 11 const { 12 id_str, 13 screen_name, 14 name, 15 profile_image_url, 16 } = userCredential.additionalUserInfo.profile; 17 18 const { accessToken, secret } = userCredential.credential; 19 20 const loginUser = { 21 uid: id_str, 22 userName: screen_name, 23 displayName: name, 24 profileImgUrl: profile_image_url, 25 }; 26 setCurrentUser(loginUser); 27 window.localStorage.setItem('user', JSON.stringify(loginUser)); 28 29 30 // ユーザー情報をDBに保存 31 await fetch('/api/users', { 32 method: 'POST', 33 headers: { 34 'Content-Type': 'application/json', 35 }, 36 body: JSON.stringify(loginUser), 37 }); 38 39 // フォロワー情報を取得してDBに保存 40 await fetch('/api/saveFriends', { 41 method: 'POST', 42 headers: { 43 'Content-Type': 'application/json', 44 }, 45 body: JSON.stringify({ 46 uid: id_str, 47 access_token_key: accessToken, 48 access_token_secret: secret, 49 }), 50 }); 51 52 await Router.push(`/users/${id_str}`); //遷移しない 53 }); 54 }; 55 56 const logout = () => { 57 firebase.auth().signOut(); 58 setCurrentUser(null); 59 window.localStorage.removeItem('user'); 60 Router.push('/'); 61 }; 62 63 64 return [login, logout]; 65} 66

呼び出し元

jsx

1<ListItem button onClick={login}>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問