Nuxt.js에서 Auth Module을 사용하여 로그인 기능 구현
흐르는 흐름을 설명하면,
라는 간단한 것입니다.
서버가 리턴한 토큰은 클라이언트측이 API를 두드릴 때 헤더에 부여하여 사용합니다.
로그인 시 요청 및 응답
클라이언트 측은 api/login
에게 다음과 같은 body를 가진 POST 요청을 보내야 합니다.
{
"email": "[email protected]",
"password": "password"
}
서버측은 응답으로서 헤더에 부여하기 위한 토큰을 돌려줍니다.
{
"token": "xxxxxxxxxxxxxx"
}
사용자 정보를 반환하는 API 준비
헤더에 Authorization: Bearer xxxxxxxxxxxxxx
를 부여하고 api/me
에 GET 요청을 보내서 아래와 같은 사용자 정보를 반환하는 API를 제공합니다 (내용은 예입니다).
{
"id": 1,
"name": "tanaka hiroshi",
"age": "32"
}
Auth Module 소개
Auth Module를 소개합니다.
npm install --save @nuxtjs/auth
Auth Module은 vuex store를 사용하므로 store를 사용하지 않는 경우 store/index.js
라는 빈 파일을 만듭니다.
그런 다음 nuxt.config.js
에 설정을 추가합니다.
nuxt.config.jsmodules: [
'@nuxtjs/auth'
],
Auth Module 설정하기
nuxt.config.js
에 Auth Module 설정을 추가합시다.
설정에 대한 자세한 내용은 이 문서을 확인하십시오.
nuxt.config.jsexport default {
auth: {
redirect: {
login: '/login', // 未ログイン時に認証ルートへアクセスした際のリダイレクトURL
logout: '/login', // ログアウト時のリダイレクトURL
callback: false, // Oauth認証等で必要となる コールバックルート
home: '/', // ログイン後のリダイレクトURL
},
strategies: {
local: {
endpoints: {
login: { url: 'api/login', method: 'post', propertyName: 'token' },
user: { url: 'api/me', method: 'get', propertyName: false},
logout: false
},
}
}
},
}
이상으로 설정 완료입니다!
로그인 기능 만들기
샘플로서 아래와 같은 로그인 페이지를 구현합니다.
login 함수의 this.$auth.loginWith('local', { data: this.form });
부분에서 로그인을 수행합니다.
이렇게 하면 이전nuxt.config.js
에서 설정한 api/login
와 api/me
가 두드려져 헤더에 부여하는 token과 user 정보가 store에 저장됩니다.
그런 다음 로그인 후 페이지로 리디렉션됩니다.
store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인할 수 있으므로, middleware에 로그인 판정을 구현해, 로그인 완료되면 로그인 후의 페이지에 리디렉트 하도록(듯이) 하고 있습니다.
또한 store.$auth.getToken('local');
에서 헤더에 부여하는 token을 얻을 수 있으므로 axios의 공통 설정 부분에 지정하여 사용할 수도 있습니다.
참고: Nuxt.js에서 axios의 공통 처리를 만들고 API 호출 처리를 래핑하여 사용
pages/login.vue<template lang="pug">
.login-container
el-form(:model="form")
el-form-item(label="メールアドレス")
el-input(v-model="form.email")
el-form-item(label="パスワード")
el-input(v-model="form.password" type="password")
el-button(type="primary" @click="login") ログイン
</template>
<script>
export default {
middleware({ store, redirect }) {
if(store.$auth.loggedIn) {
redirect('/');
}
},
data() {
return {
form: {
email: '',
password: ''
}
}
},
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
} catch(error) {
console.log(error);
}
}
}
}
</script>
<style lang="scss">
.login-container {
margin: 50px auto;
width: 300px;
text-align: center;
}
</style>
참고로 nuxt.config.js
로 설정한 로그인 후 리디렉션 대상을 home: false
로 설정하여 로그인 후 리디렉션 타이밍을 임의로 제어할 수 있습니다.
pages/login.vue<script>
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
// ここでホームへリダイレクトする前に行いたい処理
this.$router.replace({ path: '/' }); // 任意のタイミングでリダイレクト
} catch(error) {
console.log(error);
}
}
}
</script>
로그아웃 기능 만들기
샘플로서 아래와 같은 로그인된 페이지를 구현합니다.
logout 함수의 this.$auth.logout();
부분에서 로그아웃을 수행합니다.
이렇게 하면 저장소에 저장된 사용자 정보가 삭제되고 로그인 페이지로 리디렉션됩니다.
로그인 페이지와 같이 store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인해, middleware에 로그인 판정을 구현하고 있습니다.
로그인하지 않은 경우 로그인 페이지로 리디렉션합니다.
this.$auth.user
에서 사용자 정보를 얻을 수도 있습니다.
index.vue<template lang="pug">
.container
p 名前:{{ user.name }}
p 年齢:{{ user.age }} 歳
el-button.button(type="primary" @click="logout") ログアウト
</template>
<script>
export default {
middleware({ store, redirect }) {
if(!store.$auth.loggedIn) {
redirect('/login');
}
},
computed: {
user() {
return this.$auth.user;
}
},
methods: {
logout() {
this.$auth.logout();
},
}
}
</script>
<style lang="scss">
.container {
margin: 50px auto;
width: 300px;
text-align: center;
.button {
margin-top: 30px;
}
}
</style>
이상으로 구현 완료입니다.
간단하게 로그인/로그아웃 처리를 구현할 수 있으므로, 매우 추천입니다!
Reference
이 문제에 관하여(Nuxt.js에서 Auth Module을 사용하여 로그인 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/itouuuuuuuuu/items/1dc6401022e0d771c757
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
{
"email": "[email protected]",
"password": "password"
}
{
"token": "xxxxxxxxxxxxxx"
}
헤더에
Authorization: Bearer xxxxxxxxxxxxxx
를 부여하고 api/me
에 GET 요청을 보내서 아래와 같은 사용자 정보를 반환하는 API를 제공합니다 (내용은 예입니다).{
"id": 1,
"name": "tanaka hiroshi",
"age": "32"
}
Auth Module 소개
Auth Module를 소개합니다.
npm install --save @nuxtjs/auth
Auth Module은 vuex store를 사용하므로 store를 사용하지 않는 경우 store/index.js
라는 빈 파일을 만듭니다.
그런 다음 nuxt.config.js
에 설정을 추가합니다.
nuxt.config.jsmodules: [
'@nuxtjs/auth'
],
Auth Module 설정하기
nuxt.config.js
에 Auth Module 설정을 추가합시다.
설정에 대한 자세한 내용은 이 문서을 확인하십시오.
nuxt.config.jsexport default {
auth: {
redirect: {
login: '/login', // 未ログイン時に認証ルートへアクセスした際のリダイレクトURL
logout: '/login', // ログアウト時のリダイレクトURL
callback: false, // Oauth認証等で必要となる コールバックルート
home: '/', // ログイン後のリダイレクトURL
},
strategies: {
local: {
endpoints: {
login: { url: 'api/login', method: 'post', propertyName: 'token' },
user: { url: 'api/me', method: 'get', propertyName: false},
logout: false
},
}
}
},
}
이상으로 설정 완료입니다!
로그인 기능 만들기
샘플로서 아래와 같은 로그인 페이지를 구현합니다.
login 함수의 this.$auth.loginWith('local', { data: this.form });
부분에서 로그인을 수행합니다.
이렇게 하면 이전nuxt.config.js
에서 설정한 api/login
와 api/me
가 두드려져 헤더에 부여하는 token과 user 정보가 store에 저장됩니다.
그런 다음 로그인 후 페이지로 리디렉션됩니다.
store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인할 수 있으므로, middleware에 로그인 판정을 구현해, 로그인 완료되면 로그인 후의 페이지에 리디렉트 하도록(듯이) 하고 있습니다.
또한 store.$auth.getToken('local');
에서 헤더에 부여하는 token을 얻을 수 있으므로 axios의 공통 설정 부분에 지정하여 사용할 수도 있습니다.
참고: Nuxt.js에서 axios의 공통 처리를 만들고 API 호출 처리를 래핑하여 사용
pages/login.vue<template lang="pug">
.login-container
el-form(:model="form")
el-form-item(label="メールアドレス")
el-input(v-model="form.email")
el-form-item(label="パスワード")
el-input(v-model="form.password" type="password")
el-button(type="primary" @click="login") ログイン
</template>
<script>
export default {
middleware({ store, redirect }) {
if(store.$auth.loggedIn) {
redirect('/');
}
},
data() {
return {
form: {
email: '',
password: ''
}
}
},
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
} catch(error) {
console.log(error);
}
}
}
}
</script>
<style lang="scss">
.login-container {
margin: 50px auto;
width: 300px;
text-align: center;
}
</style>
참고로 nuxt.config.js
로 설정한 로그인 후 리디렉션 대상을 home: false
로 설정하여 로그인 후 리디렉션 타이밍을 임의로 제어할 수 있습니다.
pages/login.vue<script>
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
// ここでホームへリダイレクトする前に行いたい処理
this.$router.replace({ path: '/' }); // 任意のタイミングでリダイレクト
} catch(error) {
console.log(error);
}
}
}
</script>
로그아웃 기능 만들기
샘플로서 아래와 같은 로그인된 페이지를 구현합니다.
logout 함수의 this.$auth.logout();
부분에서 로그아웃을 수행합니다.
이렇게 하면 저장소에 저장된 사용자 정보가 삭제되고 로그인 페이지로 리디렉션됩니다.
로그인 페이지와 같이 store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인해, middleware에 로그인 판정을 구현하고 있습니다.
로그인하지 않은 경우 로그인 페이지로 리디렉션합니다.
this.$auth.user
에서 사용자 정보를 얻을 수도 있습니다.
index.vue<template lang="pug">
.container
p 名前:{{ user.name }}
p 年齢:{{ user.age }} 歳
el-button.button(type="primary" @click="logout") ログアウト
</template>
<script>
export default {
middleware({ store, redirect }) {
if(!store.$auth.loggedIn) {
redirect('/login');
}
},
computed: {
user() {
return this.$auth.user;
}
},
methods: {
logout() {
this.$auth.logout();
},
}
}
</script>
<style lang="scss">
.container {
margin: 50px auto;
width: 300px;
text-align: center;
.button {
margin-top: 30px;
}
}
</style>
이상으로 구현 완료입니다.
간단하게 로그인/로그아웃 처리를 구현할 수 있으므로, 매우 추천입니다!
Reference
이 문제에 관하여(Nuxt.js에서 Auth Module을 사용하여 로그인 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/itouuuuuuuuu/items/1dc6401022e0d771c757
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
npm install --save @nuxtjs/auth
modules: [
'@nuxtjs/auth'
],
nuxt.config.js
에 Auth Module 설정을 추가합시다.설정에 대한 자세한 내용은 이 문서을 확인하십시오.
nuxt.config.js
export default {
auth: {
redirect: {
login: '/login', // 未ログイン時に認証ルートへアクセスした際のリダイレクトURL
logout: '/login', // ログアウト時のリダイレクトURL
callback: false, // Oauth認証等で必要となる コールバックルート
home: '/', // ログイン後のリダイレクトURL
},
strategies: {
local: {
endpoints: {
login: { url: 'api/login', method: 'post', propertyName: 'token' },
user: { url: 'api/me', method: 'get', propertyName: false},
logout: false
},
}
}
},
}
이상으로 설정 완료입니다!
로그인 기능 만들기
샘플로서 아래와 같은 로그인 페이지를 구현합니다.
login 함수의 this.$auth.loginWith('local', { data: this.form });
부분에서 로그인을 수행합니다.
이렇게 하면 이전nuxt.config.js
에서 설정한 api/login
와 api/me
가 두드려져 헤더에 부여하는 token과 user 정보가 store에 저장됩니다.
그런 다음 로그인 후 페이지로 리디렉션됩니다.
store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인할 수 있으므로, middleware에 로그인 판정을 구현해, 로그인 완료되면 로그인 후의 페이지에 리디렉트 하도록(듯이) 하고 있습니다.
또한 store.$auth.getToken('local');
에서 헤더에 부여하는 token을 얻을 수 있으므로 axios의 공통 설정 부분에 지정하여 사용할 수도 있습니다.
참고: Nuxt.js에서 axios의 공통 처리를 만들고 API 호출 처리를 래핑하여 사용
pages/login.vue<template lang="pug">
.login-container
el-form(:model="form")
el-form-item(label="メールアドレス")
el-input(v-model="form.email")
el-form-item(label="パスワード")
el-input(v-model="form.password" type="password")
el-button(type="primary" @click="login") ログイン
</template>
<script>
export default {
middleware({ store, redirect }) {
if(store.$auth.loggedIn) {
redirect('/');
}
},
data() {
return {
form: {
email: '',
password: ''
}
}
},
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
} catch(error) {
console.log(error);
}
}
}
}
</script>
<style lang="scss">
.login-container {
margin: 50px auto;
width: 300px;
text-align: center;
}
</style>
참고로 nuxt.config.js
로 설정한 로그인 후 리디렉션 대상을 home: false
로 설정하여 로그인 후 리디렉션 타이밍을 임의로 제어할 수 있습니다.
pages/login.vue<script>
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
// ここでホームへリダイレクトする前に行いたい処理
this.$router.replace({ path: '/' }); // 任意のタイミングでリダイレクト
} catch(error) {
console.log(error);
}
}
}
</script>
로그아웃 기능 만들기
샘플로서 아래와 같은 로그인된 페이지를 구현합니다.
logout 함수의 this.$auth.logout();
부분에서 로그아웃을 수행합니다.
이렇게 하면 저장소에 저장된 사용자 정보가 삭제되고 로그인 페이지로 리디렉션됩니다.
로그인 페이지와 같이 store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인해, middleware에 로그인 판정을 구현하고 있습니다.
로그인하지 않은 경우 로그인 페이지로 리디렉션합니다.
this.$auth.user
에서 사용자 정보를 얻을 수도 있습니다.
index.vue<template lang="pug">
.container
p 名前:{{ user.name }}
p 年齢:{{ user.age }} 歳
el-button.button(type="primary" @click="logout") ログアウト
</template>
<script>
export default {
middleware({ store, redirect }) {
if(!store.$auth.loggedIn) {
redirect('/login');
}
},
computed: {
user() {
return this.$auth.user;
}
},
methods: {
logout() {
this.$auth.logout();
},
}
}
</script>
<style lang="scss">
.container {
margin: 50px auto;
width: 300px;
text-align: center;
.button {
margin-top: 30px;
}
}
</style>
이상으로 구현 완료입니다.
간단하게 로그인/로그아웃 처리를 구현할 수 있으므로, 매우 추천입니다!
Reference
이 문제에 관하여(Nuxt.js에서 Auth Module을 사용하여 로그인 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/itouuuuuuuuu/items/1dc6401022e0d771c757
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<template lang="pug">
.login-container
el-form(:model="form")
el-form-item(label="メールアドレス")
el-input(v-model="form.email")
el-form-item(label="パスワード")
el-input(v-model="form.password" type="password")
el-button(type="primary" @click="login") ログイン
</template>
<script>
export default {
middleware({ store, redirect }) {
if(store.$auth.loggedIn) {
redirect('/');
}
},
data() {
return {
form: {
email: '',
password: ''
}
}
},
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
} catch(error) {
console.log(error);
}
}
}
}
</script>
<style lang="scss">
.login-container {
margin: 50px auto;
width: 300px;
text-align: center;
}
</style>
<script>
methods: {
async login() {
try {
const response = await this.$auth.loginWith('local', { data: this.form });
console.log(response);
// ここでホームへリダイレクトする前に行いたい処理
this.$router.replace({ path: '/' }); // 任意のタイミングでリダイレクト
} catch(error) {
console.log(error);
}
}
}
</script>
샘플로서 아래와 같은 로그인된 페이지를 구현합니다.
logout 함수의
this.$auth.logout();
부분에서 로그아웃을 수행합니다.이렇게 하면 저장소에 저장된 사용자 정보가 삭제되고 로그인 페이지로 리디렉션됩니다.
로그인 페이지와 같이
store.$auth.loggedIn
로 로그인하고 있는지 어떤지를 확인해, middleware에 로그인 판정을 구현하고 있습니다.로그인하지 않은 경우 로그인 페이지로 리디렉션합니다.
this.$auth.user
에서 사용자 정보를 얻을 수도 있습니다.index.vue
<template lang="pug">
.container
p 名前:{{ user.name }}
p 年齢:{{ user.age }} 歳
el-button.button(type="primary" @click="logout") ログアウト
</template>
<script>
export default {
middleware({ store, redirect }) {
if(!store.$auth.loggedIn) {
redirect('/login');
}
},
computed: {
user() {
return this.$auth.user;
}
},
methods: {
logout() {
this.$auth.logout();
},
}
}
</script>
<style lang="scss">
.container {
margin: 50px auto;
width: 300px;
text-align: center;
.button {
margin-top: 30px;
}
}
</style>
이상으로 구현 완료입니다.
간단하게 로그인/로그아웃 처리를 구현할 수 있으므로, 매우 추천입니다!
Reference
이 문제에 관하여(Nuxt.js에서 Auth Module을 사용하여 로그인 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/itouuuuuuuuu/items/1dc6401022e0d771c757텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)