From 4bbb7eded3abf6045ef60971b21eed7d08afe946 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
Date: Wed, 28 Nov 2018 16:19:02 +0900
Subject: [PATCH] =?UTF-8?q?Cookie=E3=82=92=E4=BD=BF=E3=82=8F=E3=81=AA?=
 =?UTF-8?q?=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/client/app/common/views/components/signin.vue | 3 ++-
 src/client/app/mios.ts                            | 4 ++--
 src/client/app/safe.js                            | 8 --------
 src/client/app/store.ts                           | 1 +
 src/server/api/common/signin.ts                   | 3 ++-
 5 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index c1a7522b00..dd3d979852 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -67,7 +67,8 @@ export default Vue.extend({
 				username: this.username,
 				password: this.password,
 				token: this.user && this.user.twoFactorEnabled ? this.token : undefined
-			}, true).then(() => {
+			}, true).then(res => {
+				localStorage.setItem('i', res.i);
 				location.reload();
 			}).catch(() => {
 				alert(this.$t('login-failed'));
diff --git a/src/client/app/mios.ts b/src/client/app/mios.ts
index 5ed4dfd4db..fad60f4137 100644
--- a/src/client/app/mios.ts
+++ b/src/client/app/mios.ts
@@ -190,8 +190,8 @@ export default class MiOS extends EventEmitter {
 				this.store.dispatch('mergeMe', freshData);
 			});
 		} else {
-			// Get token from cookie
-			const i = (document.cookie.match(/i=(!\w+)/) || [null, null])[1];
+			// Get token from cookie or localStorage
+			const i = (document.cookie.match(/i=(!\w+)/) || [null, null])[1] || localStorage.getItem('i');
 
 			fetchme(i, me => {
 				if (me) {
diff --git a/src/client/app/safe.js b/src/client/app/safe.js
index 026fc66c6e..3e2e5ae579 100644
--- a/src/client/app/safe.js
+++ b/src/client/app/safe.js
@@ -11,11 +11,3 @@ if (!('fetch' in window)) {
 		'Your browser (or your OS) seems outdated. ' +
 		'To run Misskey, please update your browser to latest version or try other browsers.');
 }
-
-// Check whether cookie enabled
-if (!navigator.cookieEnabled) {
-	alert(
-		'Misskeyを利用するにはCookieを有効にしてください。' +
-		'\n\n' +
-		'To use Misskey, please enable Cookie.');
-}
diff --git a/src/client/app/store.ts b/src/client/app/store.ts
index 0a16a71a2a..a498b0138f 100644
--- a/src/client/app/store.ts
+++ b/src/client/app/store.ts
@@ -129,6 +129,7 @@ export default (os: MiOS) => new Vuex.Store({
 		logout(ctx) {
 			ctx.commit('updateI', null);
 			document.cookie = `i=; domain=${hostname}; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
+			localStorage.removeItem('i');
 		},
 
 		mergeMe(ctx, me) {
diff --git a/src/server/api/common/signin.ts b/src/server/api/common/signin.ts
index ddfd5f2bba..45a42e288d 100644
--- a/src/server/api/common/signin.ts
+++ b/src/server/api/common/signin.ts
@@ -21,6 +21,7 @@ export default function(ctx: Koa.Context, user: ILocalUser, redirect = false) {
 
 		ctx.redirect(config.url);
 	} else {
-		ctx.status = 204;
+		ctx.body = { i: user.token };
+		ctx.status = 200;
 	}
 }