Merged from main
This commit is contained in:
@@ -10,7 +10,7 @@ const books = Vue.createApp ({
|
||||
list: [],
|
||||
book: undefined,
|
||||
order: { quantity:1, succeeded:'', failed:'' },
|
||||
user: {}
|
||||
user: undefined
|
||||
}
|
||||
},
|
||||
|
||||
@@ -42,19 +42,25 @@ const books = Vue.createApp ({
|
||||
}
|
||||
},
|
||||
|
||||
async fetchUserInfo() {
|
||||
async login() {
|
||||
try {
|
||||
const { data } = await axios.get('/user/me')
|
||||
books.user = data
|
||||
const { data:user } = await axios.post('/user/login',{})
|
||||
if (user.id !== 'anonymous') books.user = user
|
||||
} catch (err) { books.user = { id: err.message } }
|
||||
}
|
||||
},
|
||||
|
||||
async getUserInfo() {
|
||||
try {
|
||||
const { data:user } = await axios.get('/user/me')
|
||||
if (user.id !== 'anonymous') books.user = user
|
||||
} catch (err) { books.user = { id: err.message } }
|
||||
},
|
||||
}
|
||||
}).mount("#app")
|
||||
|
||||
// initially fill list of books
|
||||
books.fetch()
|
||||
books.getUserInfo()
|
||||
books.fetch() // initially fill list of books
|
||||
|
||||
books.fetchUserInfo()
|
||||
document.addEventListener('keydown', (event) => {
|
||||
// hide user info on request
|
||||
if (event.key === 'u') books.user = undefined
|
||||
|
||||
@@ -18,11 +18,17 @@
|
||||
<body class="small-container", style="margin-top: 70px;">
|
||||
<div id='app'>
|
||||
|
||||
<div v-if="user" class="user">
|
||||
<div>User: {{ user.id || 'anonymous' }}</div>
|
||||
<div>Locale: {{ user.locale }}</div>
|
||||
<div v-if="user.tenant">Tenant: {{ user.tenant }}</div>
|
||||
</div>
|
||||
<form class="user" @submit.prevent="login">
|
||||
<div v-if="user">
|
||||
<div v-if="user.tenant">Tenant: {{ user.tenant }}</div>
|
||||
<div> User: {{ user.id }}</div>
|
||||
<div>Locale: {{ user.locale }}</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<input type="submit" value="Login" class="muted-button">
|
||||
<!-- <a href="/user/login()">Login</a> -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<h1> Capire Books </h1>
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import cds from '@sap/cds'
|
||||
|
||||
export class CatalogService extends cds.ApplicationService { init(){
|
||||
|
||||
const { Books } = cds.entities ('sap.capire.bookshop')
|
||||
const { Books } = this.entities ('sap.capire.bookshop')
|
||||
|
||||
// Reduce stock of ordered books if available stock suffices
|
||||
this.on ('submitOrder', async req => {
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
/**
|
||||
* Exposes user information
|
||||
*/
|
||||
@requires: 'authenticated-user'
|
||||
service UserService {
|
||||
|
||||
/**
|
||||
* The current user
|
||||
*/
|
||||
@@ -13,4 +11,5 @@ service UserService {
|
||||
tenant : String;
|
||||
}
|
||||
|
||||
action login() returns me;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
import cds from '@sap/cds'
|
||||
export default cds.service.impl((srv) => {
|
||||
srv.on('READ', 'me', ({ tenant, user, locale }) => ({ id: user.id, locale, tenant }))
|
||||
})
|
||||
export default class UserService extends cds.Service { init(){
|
||||
this.on('READ', 'me', ({ tenant, user, locale }) => ({ id: user.id, locale, tenant }))
|
||||
this.on('login', (req) => {
|
||||
if (req.user._is_anonymous)
|
||||
req._.res.set('WWW-Authenticate','Basic realm="Users"').sendStatus(401)
|
||||
else return this.read('me')
|
||||
})
|
||||
}}
|
||||
|
||||
12
package-lock.json
generated
12
package-lock.json
generated
@@ -1172,9 +1172,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sap/cds": {
|
||||
"version": "5.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-5.9.5.tgz",
|
||||
"integrity": "sha512-H/LIB7WnJ3JKzywnfYd9fOLDKVQokO6/JMUUXbCx+VllYuIQFwClwZ+uYQDgWYSrHePRpuOP5TxLFuMXvhdaag==",
|
||||
"version": "5.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-5.9.6.tgz",
|
||||
"integrity": "sha512-zzDoRrgAbRXUQ2n+BrDErtAyylMgcJxgWhsiJvjiZVMxAucJMPp9V+WlRsaGwSm8O6STC6NHcv9PWQ7500y9EQ==",
|
||||
"dependencies": {
|
||||
"@sap-cloud-sdk/core": "^1.41",
|
||||
"@sap-cloud-sdk/util": "^1.41",
|
||||
@@ -8086,9 +8086,9 @@
|
||||
}
|
||||
},
|
||||
"@sap/cds": {
|
||||
"version": "5.9.5",
|
||||
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-5.9.5.tgz",
|
||||
"integrity": "sha512-H/LIB7WnJ3JKzywnfYd9fOLDKVQokO6/JMUUXbCx+VllYuIQFwClwZ+uYQDgWYSrHePRpuOP5TxLFuMXvhdaag==",
|
||||
"version": "5.9.6",
|
||||
"resolved": "https://registry.npmjs.org/@sap/cds/-/cds-5.9.6.tgz",
|
||||
"integrity": "sha512-zzDoRrgAbRXUQ2n+BrDErtAyylMgcJxgWhsiJvjiZVMxAucJMPp9V+WlRsaGwSm8O6STC6NHcv9PWQ7500y9EQ==",
|
||||
"requires": {
|
||||
"@sap-cloud-sdk/core": "^1.41",
|
||||
"@sap-cloud-sdk/util": "^1.41",
|
||||
|
||||
Reference in New Issue
Block a user