
Firehase hae a beautiful function to provide a stream of auth state changes. I didn't find it's alternative in Appwrite.
May soneone help me in achieving this functionality. The only work around in my mind is just to create a timer and after every srcond it will call and send data from account.get()
as a stream but its a very horrible solution i think.
Is not there any best alternate?

Check this: https://appwrite.io/docs/apis/realtime#examples

You can get updates related to account by using the "account" channel

@D5 can we elaborate a bit further on this? According to the documentation, there should be examples on how to use realtime
on Authentication flows, but there aren't. Ignoring the vue
/nuxt
parts of the code below, do you think the approach is correct to listen to anonymous
user becomming authenticated, and authenticated
user logging out, using realtime
auth events in JS?
import type { Models, RealtimeResponseEvent } from 'appwrite'
import { useAppwrite } from './useAppwrite'
type User = Models.User<Models.Preferences>
type UseAppwriteAuthStateChangedOptions = {
onAuthenticated: (payload: User) => void
onUnauthenticated: (payload: User) => void
onSubscribed?: () => void
onUnsubscribed?: () => void
}
const ACCOUNT_CHANNEL = 'account'
function isCreateSession(events: string[], _payload: unknown): _payload is User {
return events.includes('users.*.sessions.*.create')
}
function isDeleteSession(events: string[], _payload: unknown): _payload is User {
return events.includes('users.*.sessions.*.delete')
}
export function useAppwriteAuthStateChanged({
onAuthenticated,
onSubscribed,
onUnauthenticated,
onUnsubscribed,
}: UseAppwriteAuthStateChangedOptions) {
const appwrite = useAppwrite()
const unsubscribeCb = ref<() => void>(() => undefined)
function handleUpdate({ events, payload }: RealtimeResponseEvent<unknown>) {
if (isCreateSession(events, payload)) {
onAuthenticated(payload)
resubscribe()
} else if (isDeleteSession(events, payload)) {
onUnauthenticated(payload)
resubscribe()
}
}
function subscribe() {
unsubscribeCb.value = appwrite.client.subscribe(ACCOUNT_CHANNEL, handleUpdate)
onSubscribed?.()
}
function resubscribe() {
unsubscribe()
subscribe()
}
function unsubscribe() {
unsubscribeCb.value()
onUnsubscribed?.()
}
onMounted(() => subscribe())
onUnmounted(() => unsubscribe())
return {
unsubscribe,
}
}

Hello, could you please create a separate post with this?

Certainly.

Ping me please once you've done it

Pinged on the new thread. I added some context on what I am trying to achieve, probably not very interesting for the question, but it may help if you already know someone who has passed through this problems
Recommended threads
- Migration from Selfhosted to Selfhosted-...
Hi, i am trying to migrate from one self hosted instance (1.7.4) to another one (1.7.4) via the migration tool. I've tried repeatly, but it won't import all doc...
- Devops and migration schemas management ...
Anyone has suggestions on migration management with appwrite I am going to have one app that will have different isolated deployment. So I need to have updated...
- Invalid `queries` param: Queries must be...
I dont really understand why i am having this issues, ```import { Client, Users, Query } from 'node-appwrite'; export default async ({ req, res }) => { con...
