teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

追記

2021/03/26 10:13

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -9,6 +9,23 @@
9
9
  ①ログイン成功後、mypageに遷移するようにしておりますが、
10
10
  ヘッダー部をログイン状態では「ログアウト」に変更させて、ログアウト状態では「ログインページ」にしたいです。
11
11
 
12
+ ```ここに言語を入力
13
+
14
+ ※追記
15
+ header.vue
16
+
17
+ return {
18
+ authenticatedUser: "",
19
+ };
20
+ ```
21
+
22
+ 上記の指定が抜けていたので、追加したらログアウトの挙動は、
23
+ ログイン状態では表示され、ログアウト状態では非表示になりました。
24
+
25
+ しかし、ログインのリンクは常に表示される形となっています。。
26
+
27
+ ログインボタンもログイン状態では非表示、ログアウト状態では表示させたいです。
28
+
12
29
  ②上記に続きますが、ログインしないとmypageのページが閲覧できないようにしたいです。
13
30
 
14
31
 

3

誤字修正しました。

2021/03/26 10:12

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -9,7 +9,7 @@
9
9
  ①ログイン成功後、mypageに遷移するようにしておりますが、
10
10
  ヘッダー部をログイン状態では「ログアウト」に変更させて、ログアウト状態では「ログインページ」にしたいです。
11
11
 
12
- ②上記に続きますが、ログインしないと全てのページ閲覧できないようにしたいです。
12
+ ②上記に続きますが、ログインしないとmypageのページ閲覧できないようにしたいです。
13
13
 
14
14
 
15
15
  ### 該当のソースコード
@@ -27,6 +27,7 @@
27
27
  <router-link to="/first" class="header-link">初めての方へ</router-link>
28
28
  <router-link to="/signup" class="header-link">新規登録</router-link>
29
29
  <router-link to="/signin" class="header-link">ログイン</router-link>
30
+ <router-link to="/mypage" class="header-link">マイページ</router-link>
30
31
  <button class="header-link" @click="signOut" v-if="authenticatedUser">ログアウト</button>
31
32
  </div>
32
33
  </header>

2

ログアウトボタン実装しました。

2021/03/26 09:56

投稿

TMTN
TMTN

スコア53

title CHANGED
@@ -1,1 +1,1 @@
1
- vue.js × firebaseにてログインは「ログアウト」に変更させて、ログアウトは「ログインページ」に戻すようにしたい
1
+ vue.js × firebaseにてログイン状態では「ログアウト」に変更させて、ログアウト状態では「ログインページ」にしたいです
body CHANGED
@@ -3,21 +3,15 @@
3
3
  現在、vue.jsにてポートフォリオを作成しております。
4
4
  (プログラミング自体勉強し初めて約3ヶ月ほどと浅いため、ご了承のほどお願いします。。)
5
5
 
6
- そこで現在、vueにてfirebaseと連携させて新規登録、ログインの追加するところまでできましたが、
6
+ そこで現在、vueにてfirebaseと連携させて新規登録、ログイン、ログアウトの追加するところまでできましたが、
7
- 以下のことを実装したいのですが、調べて試してみましたが上手く実装されず苦戦してます・・
7
+ 以下のことを実装したいのですが、調べて試してみましたが上手く実装されず苦戦してます・・
8
8
 
9
- ①ログイン成功後、メインページに遷移するようにしておりますが、
9
+ ①ログイン成功後、mypageに遷移するようにしておりますが、
10
- ヘッダー部をログインは「ログアウト」に変更させて、ログアウトは「ログインページ」に戻すようにしたいです。
10
+ ヘッダー部をログイン状態では「ログアウト」に変更させて、ログアウト状態では「ログインページ」にしたいです。
11
11
 
12
12
  ②上記に続きますが、ログインしないと全てのページ閲覧できないようにしたいです。
13
13
 
14
- ③新規登録にて、メールアドレスとパスワード入力後、登録ボタンを押したら、ログインページに遷移するようにしたいです。
15
14
 
16
- 以上、3点初歩的なことかもしれませんが、分かる方お力添えをいただきたいです。
17
-
18
- よろしくお願いいたします。
19
-
20
-
21
15
  ### 該当のソースコード
22
16
 
23
17
  ```ここに言語名を入力
@@ -128,13 +122,13 @@
128
122
  ◆singin.vue
129
123
 
130
124
  <template>
131
- <div class="signin">
125
+ <div class="signup">
132
- <h2>ログイン</h2>
126
+ <h2>新規登録</h2>
133
127
  <input type="text" placeholder="Email" v-model="email" />
134
128
  <input type="password" placeholder="Password" v-model="password" />
135
- <button class="btn" @click="signIn">ログイン</button>
129
+ <button class="btn-signup" @click="signUp">登録</button>
136
130
  <p>
137
- アカウントをお持ちでない方は
131
+ 既に登録済みの方は
138
132
  <router-link to="/signup">こちらへ</router-link>
139
133
  </p>
140
134
  </div>
@@ -144,35 +138,32 @@
144
138
  import firebase from "firebase";
145
139
 
146
140
  export default {
147
- name: "Signin",
141
+ name: "Signup",
148
- data: function() {
142
+ data() {
149
143
  return {
150
144
  email: "",
151
145
  password: ""
152
146
  };
153
147
  },
154
148
  methods: {
155
- signIn: function() {
149
+ signUp: function() {
156
- console.log(this.email);
157
150
  firebase
158
151
  .auth()
159
- .signInWithEmailAndPassword(this.email, this.password)
152
+ .createUserWithEmailAndPassword(this.email, this.password)
160
- .then(
161
- () => {
153
+ .then(user => {
162
- alert("ログインに成功しました。");
154
+ alert("登録に成功しました。", user.email);
163
- this.$router.push("/");
155
+ this.$router.push("/signin");
164
- },
156
+ })
165
- err => {
157
+ .catch(error => {
166
- alert("ログインに失敗しました。",err.message);
158
+ alert("登録情報が正くありせん。", error.message);
167
- }
168
- );
159
+ });
169
160
  }
170
161
  }
171
162
  };
172
163
  </script>
173
164
 
174
165
  <style lang="scss">
175
- .signin {
166
+ .signup {
176
167
  height: 90vh;
177
168
  display: flex;
178
169
  flex-flow: column nowrap;
@@ -184,17 +175,17 @@
184
175
  }
185
176
 
186
177
  a {
187
- color: #008deb;
178
+ color: #eb6100;
188
179
  }
189
180
  input {
190
181
  margin: 10px 0;
191
182
  padding: 10px;
192
183
  }
193
- .btn {
184
+ .btn-signup {
194
- width: rem;
185
+ width: 5rem;
195
186
  margin: 1rem;
196
187
  color: #fff;
197
- background-color: #008deb;
188
+ background-color: #eb6100;
198
189
  padding: 0.5rem;
199
190
  border-radius: 1rem;
200
191
  text-decoration: none;
@@ -207,6 +198,7 @@
207
198
  }
208
199
  </style>
209
200
 
201
+
210
202
  ```
211
203
  ```ここに言語を入力
212
204
 
@@ -242,10 +234,11 @@
242
234
  .auth()
243
235
  .createUserWithEmailAndPassword(this.email, this.password)
244
236
  .then(user => {
245
- alert("このメールアドレスを登録しました。", user.email);
237
+ alert("登録に成功しました。", user.email);
238
+ this.$router.push("/signin");
246
239
  })
247
240
  .catch(error => {
248
- alert("このメールアドレスは登録できませんでした。", error.message);
241
+ alert("登録情報が正しくありません。", error.message);
249
242
  });
250
243
  }
251
244
  }
@@ -299,7 +292,7 @@
299
292
  import Signin from "../views/signin.vue";
300
293
  import Signup from "../views/signup.vue";
301
294
  import First from "../views/first.vue";
302
- import firebase from "firebase";
295
+ import Mypage from "../views/mypage.vue";
303
296
 
304
297
  Vue.use(VueRouter);
305
298
 
@@ -308,7 +301,6 @@
308
301
  path: "/",
309
302
  name: "Main",
310
303
  component: Main,
311
- meta: { requiresAuth: true },
312
304
  },
313
305
  {
314
306
  path: "/signin",
@@ -325,6 +317,12 @@
325
317
  name: "First",
326
318
  component: First,
327
319
  },
320
+ {
321
+ path: "/mypage",
322
+ name: "Mypage",
323
+ component: Mypage,
324
+ meta: { requiresAuth: true },
325
+ },
328
326
  ];
329
327
 
330
328
  const router = new VueRouter({
@@ -333,23 +331,6 @@
333
331
  routes,
334
332
  });
335
333
 
336
- router.beforeEach((to, from, next) => {
337
- const requiresAuth = to.matched.some(record => record.meta.requiresAuth)
338
- if (requiresAuth)
339
- firebase.auth().onAuthStateChanged(function (user) {
340
- if (user) {
341
- next()
342
- } else {
343
- next({
344
- path: '/signin',
345
- query: { redirect: to.fullPath }
346
- })
347
- }
348
- })
349
- } else {
350
- next() // next()
351
- }
352
- })
353
334
 
354
335
  export default router;
355
336
 

1

header.vueへログアウトボタンを作り、ログインとログアウトを実装しました。

2021/03/26 09:49

投稿

TMTN
TMTN

スコア53

title CHANGED
File without changes
body CHANGED
@@ -27,20 +27,45 @@
27
27
  <template>
28
28
  <header class="header">
29
29
  <router-link to="/" class="header-ttl">
30
- <span class="header-ttl-color">C</span>inema</router-link
30
+ <span class="header-ttl-color">C</span>inemary</router-link
31
31
  >
32
32
  <div class="header-menu">
33
33
  <router-link to="/first" class="header-link">初めての方へ</router-link>
34
34
  <router-link to="/signup" class="header-link">新規登録</router-link>
35
35
  <router-link to="/signin" class="header-link">ログイン</router-link>
36
- <router-link class="header-link" @click="signOut">ログアウト</router-link>
36
+ <button class="header-link" @click="signOut" v-if="authenticatedUser">ログアウト</button>
37
37
  </div>
38
38
  </header>
39
39
  </template>
40
40
 
41
41
  <script>
42
+ import firebase from "firebase";
43
+
42
44
  export default {
45
+ name: "signOut",
43
- methods: {},
46
+ methods: {
47
+ signOut: function() {
48
+ firebase
49
+ .auth()
50
+ .signOut()
51
+ .then(() => {
52
+ alert("ログアウトしました。");
53
+ this.$router.push("/signin");
54
+ })
55
+ .catch(() => {
56
+ alert("ログアウトができません。");
57
+ });
58
+ },
59
+ },
60
+ mounted() {
61
+ firebase.auth().onAuthStateChanged((user) => {
62
+ if (user) {
63
+ this.authenticatedUser = true;
64
+ } else {
65
+ this.authenticatedUser = false;
66
+ }
67
+ });
68
+ },
44
69
  };
45
70
  </script>
46
71
 
@@ -96,6 +121,7 @@
96
121
  }
97
122
  </style>
98
123
 
124
+
99
125
  ```
100
126
  ```ここに言語を入力
101
127