How to get current users “uid” in component | Angular 7
Trying to make that each user can create and read his own data.
I am working everything same as in this tutorial but its not working as there:
https://angularfirebase.com/lessons/managing-firebase-user-relationships-to-database-records/
My database is structured like this:
-|items
-|userId
-|itemId
This is my service:
userId: string;
constructor(private db: AngularFireDatabase, private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
})
}
And example function in service that gets items from database:
getRelays(): Observable<any> {
if(!this.userId) return;
this.relaysRef = this.db.list('relays/' + this.userId)
return this.relaysRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ $key: c.payload.key, ...c.payload.val() }))
)
);
}
I want to access that current users id in component so I can get items based on current user but variable userId only works inside subscription and returns undefined outside it.
This is how i login and logout (in another component):
login() {
this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
}
logout() {
this.afAuth.auth.signOut();
}
Thanks for help!
add a comment |
Trying to make that each user can create and read his own data.
I am working everything same as in this tutorial but its not working as there:
https://angularfirebase.com/lessons/managing-firebase-user-relationships-to-database-records/
My database is structured like this:
-|items
-|userId
-|itemId
This is my service:
userId: string;
constructor(private db: AngularFireDatabase, private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
})
}
And example function in service that gets items from database:
getRelays(): Observable<any> {
if(!this.userId) return;
this.relaysRef = this.db.list('relays/' + this.userId)
return this.relaysRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ $key: c.payload.key, ...c.payload.val() }))
)
);
}
I want to access that current users id in component so I can get items based on current user but variable userId only works inside subscription and returns undefined outside it.
This is how i login and logout (in another component):
login() {
this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
}
logout() {
this.afAuth.auth.signOut();
}
Thanks for help!
add a comment |
Trying to make that each user can create and read his own data.
I am working everything same as in this tutorial but its not working as there:
https://angularfirebase.com/lessons/managing-firebase-user-relationships-to-database-records/
My database is structured like this:
-|items
-|userId
-|itemId
This is my service:
userId: string;
constructor(private db: AngularFireDatabase, private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
})
}
And example function in service that gets items from database:
getRelays(): Observable<any> {
if(!this.userId) return;
this.relaysRef = this.db.list('relays/' + this.userId)
return this.relaysRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ $key: c.payload.key, ...c.payload.val() }))
)
);
}
I want to access that current users id in component so I can get items based on current user but variable userId only works inside subscription and returns undefined outside it.
This is how i login and logout (in another component):
login() {
this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
}
logout() {
this.afAuth.auth.signOut();
}
Thanks for help!
Trying to make that each user can create and read his own data.
I am working everything same as in this tutorial but its not working as there:
https://angularfirebase.com/lessons/managing-firebase-user-relationships-to-database-records/
My database is structured like this:
-|items
-|userId
-|itemId
This is my service:
userId: string;
constructor(private db: AngularFireDatabase, private afAuth: AngularFireAuth) {
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
})
}
And example function in service that gets items from database:
getRelays(): Observable<any> {
if(!this.userId) return;
this.relaysRef = this.db.list('relays/' + this.userId)
return this.relaysRef.snapshotChanges().pipe(
map(changes =>
changes.map(c => ({ $key: c.payload.key, ...c.payload.val() }))
)
);
}
I want to access that current users id in component so I can get items based on current user but variable userId only works inside subscription and returns undefined outside it.
This is how i login and logout (in another component):
login() {
this.afAuth.auth.signInWithPopup(new auth.GoogleAuthProvider());
}
logout() {
this.afAuth.auth.signOut();
}
Thanks for help!
edited Jan 3 at 20:42
Frank van Puffelen
244k29389416
244k29389416
asked Jan 3 at 19:30
Timotej SofijanovićTimotej Sofijanović
104
104
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
It's because observables are asynchronus. Since the details of the user are brought in an asynchronous manner. The userId will not be available outside the subscribe method. So you need to write the logic inside the subscribe block inorder to achieve the desired result.
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
//you have to write the logic here.
})
add a comment |
the problem you faced because you are subscribing to an observable and whenever it notice any changes it get some data with id and changes the value of "uid".
the best approach to handle this is to store "responce.uid" to your local storage and get that id whenever you need from local storage.
like this
this.api.getUser(res.user.uid).subscribe(resp => {
if (resp) {
localStorage.setItem('uid', res.user.uid);
localStorage.setItem('email', this.user.email); })
add a comment |
you can create a service which will store current user data.
interface IUser {
id: number;
name: string;
}
@Injectable()
export class CurrentUserService {
user: IUser;
}
somewhere in your firebase auth code:
whenLoggedIn(user: IUser) {
this.currentUserService.user = user;
}
Component
constructor(public currentUserService: CurrentUserService) {}
Template
{{ currentUserService.user.id }}
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54028662%2fhow-to-get-current-users-uid-in-component-angular-7%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
It's because observables are asynchronus. Since the details of the user are brought in an asynchronous manner. The userId will not be available outside the subscribe method. So you need to write the logic inside the subscribe block inorder to achieve the desired result.
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
//you have to write the logic here.
})
add a comment |
It's because observables are asynchronus. Since the details of the user are brought in an asynchronous manner. The userId will not be available outside the subscribe method. So you need to write the logic inside the subscribe block inorder to achieve the desired result.
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
//you have to write the logic here.
})
add a comment |
It's because observables are asynchronus. Since the details of the user are brought in an asynchronous manner. The userId will not be available outside the subscribe method. So you need to write the logic inside the subscribe block inorder to achieve the desired result.
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
//you have to write the logic here.
})
It's because observables are asynchronus. Since the details of the user are brought in an asynchronous manner. The userId will not be available outside the subscribe method. So you need to write the logic inside the subscribe block inorder to achieve the desired result.
this.afAuth.authState.subscribe(user => {
if(user) this.userId = user.uid
//you have to write the logic here.
})
answered Jan 3 at 21:02
arkark
5951619
5951619
add a comment |
add a comment |
the problem you faced because you are subscribing to an observable and whenever it notice any changes it get some data with id and changes the value of "uid".
the best approach to handle this is to store "responce.uid" to your local storage and get that id whenever you need from local storage.
like this
this.api.getUser(res.user.uid).subscribe(resp => {
if (resp) {
localStorage.setItem('uid', res.user.uid);
localStorage.setItem('email', this.user.email); })
add a comment |
the problem you faced because you are subscribing to an observable and whenever it notice any changes it get some data with id and changes the value of "uid".
the best approach to handle this is to store "responce.uid" to your local storage and get that id whenever you need from local storage.
like this
this.api.getUser(res.user.uid).subscribe(resp => {
if (resp) {
localStorage.setItem('uid', res.user.uid);
localStorage.setItem('email', this.user.email); })
add a comment |
the problem you faced because you are subscribing to an observable and whenever it notice any changes it get some data with id and changes the value of "uid".
the best approach to handle this is to store "responce.uid" to your local storage and get that id whenever you need from local storage.
like this
this.api.getUser(res.user.uid).subscribe(resp => {
if (resp) {
localStorage.setItem('uid', res.user.uid);
localStorage.setItem('email', this.user.email); })
the problem you faced because you are subscribing to an observable and whenever it notice any changes it get some data with id and changes the value of "uid".
the best approach to handle this is to store "responce.uid" to your local storage and get that id whenever you need from local storage.
like this
this.api.getUser(res.user.uid).subscribe(resp => {
if (resp) {
localStorage.setItem('uid', res.user.uid);
localStorage.setItem('email', this.user.email); })
answered Jan 3 at 20:27
Muhammad AbdullahMuhammad Abdullah
42416
42416
add a comment |
add a comment |
you can create a service which will store current user data.
interface IUser {
id: number;
name: string;
}
@Injectable()
export class CurrentUserService {
user: IUser;
}
somewhere in your firebase auth code:
whenLoggedIn(user: IUser) {
this.currentUserService.user = user;
}
Component
constructor(public currentUserService: CurrentUserService) {}
Template
{{ currentUserService.user.id }}
add a comment |
you can create a service which will store current user data.
interface IUser {
id: number;
name: string;
}
@Injectable()
export class CurrentUserService {
user: IUser;
}
somewhere in your firebase auth code:
whenLoggedIn(user: IUser) {
this.currentUserService.user = user;
}
Component
constructor(public currentUserService: CurrentUserService) {}
Template
{{ currentUserService.user.id }}
add a comment |
you can create a service which will store current user data.
interface IUser {
id: number;
name: string;
}
@Injectable()
export class CurrentUserService {
user: IUser;
}
somewhere in your firebase auth code:
whenLoggedIn(user: IUser) {
this.currentUserService.user = user;
}
Component
constructor(public currentUserService: CurrentUserService) {}
Template
{{ currentUserService.user.id }}
you can create a service which will store current user data.
interface IUser {
id: number;
name: string;
}
@Injectable()
export class CurrentUserService {
user: IUser;
}
somewhere in your firebase auth code:
whenLoggedIn(user: IUser) {
this.currentUserService.user = user;
}
Component
constructor(public currentUserService: CurrentUserService) {}
Template
{{ currentUserService.user.id }}
answered Jan 3 at 22:18
m.kochm.koch
1042
1042
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54028662%2fhow-to-get-current-users-uid-in-component-angular-7%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown