Open oliver92 opened 4 years ago
Sorry for the delay, I'll investigate this.
If you could file a separate issue for the friend/unfriend error you're seeing, that would be great. Thanks!
I'm affected by this as well.. as a workaround, i refresh the token on every call to the Reddit obj and store it if it differs. i don't know if this a good workaround but it's working so far.
Reddit get reddit {
this.refreshCredentials();
return this._reddit;
}
void refreshCredentials() {
this._reddit.auth.refresh();
newCredentials = this._reddit.auth.credentials.toJson();
if (newCredentials != getStoredCredentials) {
storeCredentials(newCredentials);
}
}
A summary of whatever is below: Access Token: Expires after 1 hour of issuance. Refresh Token: Can be used to get a access token indefinitely. Expires 1 year after last usage. Use restoreInstalledFlow() with this.
A more detailed version:
@bkonyi You need to decide whether or not the implicit
flow is needed. I personally think its not needed for reddit.
We don't need a for onCredentialsRefreshed.
First Method(Not implemented):
Currently the implicit
parameter is not passed and the implicit authorization type is not used. This type is ONLY for Installed applications. No refresh token is returned, and the access code expires every 1 hour. It also returns the time when the code will expire, using which you can know if the code expired.
Second Method:
By default with the installed flow, if you don't change the duration
parameter on Reddit.auth.url()
(its permanent
by default), you will get a refresh token which expires 1 year after last use. Meaning as long the token is in continuous use, you can indefinitely use Reddit.restoreInstalledAuthenticatedInstance()
. So just save the last used time, and generate a new one if its been a 1 year after the last Reddit.restoreInstalledAuthenticatedInstance()
use.
Secondly, if you decide to use temporary
duration, you wont get a refresh token. You only get a access token which expires after 1 hour. Either get a new token every time the app opens up or save the time when the code was used. Check the time and then do the auth again.
Also look at #196.
Could you please put a way to set the onCredentialsRefreshed in the AuthorizationCodeGrant so a top level notification is sent that the refresh token has been refreshed. I need this because when i use the installed flow, once i authorize i store the credentials so i can use the restore flow. But since i never update the credentials stored, after the expiration of the refresh token, DRAW refreshes it, but i never update my credentials. So then when the application is closed and then opened after a while the restore method fails since i give it the old refresh token.
Also i noticed the friend and unfriend return error "$username is not a know Redditor". I can open a separate issue for this, if thats what your prefer.
Tnx for the awesome API wrapper BTW :) Oliver