質問編集履歴
4
追記
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
誤字修正しました。
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
ログアウトボタン実装しました。
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="
|
125
|
+
<div class="signup">
|
132
|
-
<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="
|
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: "
|
141
|
+
name: "Signup",
|
148
|
-
data
|
142
|
+
data() {
|
149
143
|
return {
|
150
144
|
email: "",
|
151
145
|
password: ""
|
152
146
|
};
|
153
147
|
},
|
154
148
|
methods: {
|
155
|
-
|
149
|
+
signUp: function() {
|
156
|
-
console.log(this.email);
|
157
150
|
firebase
|
158
151
|
.auth()
|
159
|
-
.
|
152
|
+
.createUserWithEmailAndPassword(this.email, this.password)
|
160
|
-
.then(
|
161
|
-
|
153
|
+
.then(user => {
|
162
|
-
|
154
|
+
alert("登録に成功しました。", user.email);
|
163
|
-
|
155
|
+
this.$router.push("/signin");
|
164
|
-
|
156
|
+
})
|
165
|
-
|
157
|
+
.catch(error => {
|
166
|
-
|
158
|
+
alert("登録情報が正しくありません。", error.message);
|
167
|
-
}
|
168
|
-
);
|
159
|
+
});
|
169
160
|
}
|
170
161
|
}
|
171
162
|
};
|
172
163
|
</script>
|
173
164
|
|
174
165
|
<style lang="scss">
|
175
|
-
.
|
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: #
|
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:
|
185
|
+
width: 5rem;
|
195
186
|
margin: 1rem;
|
196
187
|
color: #fff;
|
197
|
-
background-color: #
|
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("
|
237
|
+
alert("登録に成功しました。", user.email);
|
238
|
+
this.$router.push("/signin");
|
246
239
|
})
|
247
240
|
.catch(error => {
|
248
|
-
alert("
|
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
|
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へログアウトボタンを作り、ログインとログアウトを実装しました。
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>
|
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
|
-
<
|
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
|
|