omniphx / forrest Goto Github PK
View Code? Open in Web Editor NEWA Laravel library for Salesforce
Home Page: https://omniphx.github.io/forrest/
License: MIT License
A Laravel library for Salesforce
Home Page: https://omniphx.github.io/forrest/
License: MIT License
Self-reporting an issue I've noticed. Authentication breaks when using xml format.
To fix change config option to 'json'.
The json response returned does not have a "refresh_token" key for an of the array items. IT seems that maybe this response format from Force has changed, I replaced refresh_token with id_token and it appears to work as expected.
Here is the format of the response I received from Force:
{
"id" :"",
"issued_at" :"",
"scope" :"",
"instance_url" :"",
"token_type" :"",
"id_token" :"",
"access_token" :""
}
Hello, apologies for the newbie problem but I've spent quite a bit of time retracing the setup process and am still getting this error.
I get this when I call Forrest::query('SELECT Id, Name FROM Account')
from within a controller. I have this at the top of the controller:
use Omniphx\Forrest\Providers\Laravel\ForrestServiceProvider as Forrest;
The query call succeeds when I put it within a route directly and then pass the results to the view using View::make
.
I'm on Laravel 5.2 and Forrest 2.1.3.
I've triple checked the app.php config and all looks good there. And figure it must be right if the statement works in the route directly.
Any help is much appreciated!
Thanks
You said,
After saving, you will now be given a Consumer Key and Consumer Secret. Update your config file with values for consumerKey, consumerSecret, loginURL and callbackURI.
I only see 3 : consumerKey, consumerSecret, and callbackURI.
I don't see loginURL.
With that said, what should I put in my credentials settings for login url :
'credentials' => [
'consumerKey' => env('SALESFORCE_CONSUMER_KEY'),
'consumerSecret' => env('SALESFORCE_CONSUMER_SECRET'),
'callbackURI' => env('SALESFORCE_CALLBACK_URI'),
'loginURL' => env('SALESFORCE_LOGIN_URL'), // <----- ????
],
Is it https://login.salesforce.com/ ?
https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/headers_api_usage.htm
Sforce-Limit-Info: api-usage=25/5000; per-app-api-usage=17/250(appName=sample-connected-app)
Is there any way to use a Paginator with this?
I know it just came out, but do you plan on supporting Laravel 5.2?
Thanks!
On a case-sensitive system Forrest fails to load when attempting to include the routes file. ForrestServiceProvider.php
is attempting to load routes/UserPassword.php
but the actual path is Routes/UserPassword.php
(notice the capitalisation of Routes
).
Error is: include(/path_to_application/vendor/omniphx/forrest/src/Omniphx/Forrest/Providers/Laravel/routes/UserPassword.php): failed to open stream: No such file or directory
Currently, this codebase doesn't provide a method for storing the tokens forever. This was brought up in #63
Need to add a config option for storing token forever. Something like 'storeForever' => true
Then Cache:put('key','value','expiration');
would becomes Cache::forever('key', 'value');
if its specified in the config file.
In our system we literally are calling the SF API from an API of our own. So session based token storage does not persist at all. A cache or file or database storage of the token would be useful for persistence (and thus speed).
Hi there.
I'm trying to insert records into Salesforce from my application and I modified the examples given to insert into the Lead object instead. For example, I used
$body = ['Name' => 'Bart Simpson'];
Forrest::sobjects('Lead', [
'method' => 'post',
'body' => $body
]);
But the lead won't show up in Salesforce, nor does it show up when I use
Forrest::query('SELECT Name FROM Lead')
However, it works perfectly fine if I insert into Account.
Could anyone shed some light on what I'm doing wrong?
I keep getting this. Do I need to explicitly set the token that comes from the authenicate methos
MissingTokenException in LaravelStorageProvider.php line 32:
No token available in 'session' storage
in LaravelStorageProvider.php line 32
at LaravelStorageProvider->getTokenData() in Client.php line 491
at Client->getTokenData() in Client.php line 503
at Client->getInstanceUrl() in Client.php line 458
at Client->__call('sobjects', array('Account', array('method' => 'post', 'body' => array('Name' => 'New Account')))) in Facade.php line 213
at WebServer->sobjects('Account', array('method' => 'post', 'body' => array('Name' => 'New Account'))) in Facade.php line 213
at Facade::__callStatic('sobjects', array('Account', array('method' => 'post', 'body' => array('Name' => 'New Account')))) in routes.php line 24
at Forrest::sobjects('Account', array('method' => 'post', 'body' => array('Name' => 'New Account'))) in routes.php line 24
at RouteServiceProvider->{closure}()
at call_user_func_array(object(Closure), array()) in Route.php line 157
at Route->runCallable(object(Request)) in Route.php line 129
was testing the plugin, very good, everything works perfectly using the browser, but with ajax, nothing worked, I do not know which headers or cookies send in the request, would have some example using ajax? grateful.
First thanks for your awesome library. in your UserPassword class request method if the token expired it should go to the catch and get the refresh token. But your TokenExpiredException class is undefined because you don't have that in the namespace. We fixed that by doing: use Omniphx\Forrest\Exceptions\TokenExpiredException;
When I hit salesforce API I get proper salesforce error as follows with same arguments. But "forrest" keeps giving me "Salesforce Response Error"
[
{
"message": "Duplicate Username.
The username already exists in this or another Salesforce organization. Usernames must be unique across all Salesforce organizations. To resolve, use a different username (it doesn't need to match the user's email address). ",
"errorCode": "DUPLICATE_USERNAME",
"fields": [
"Username"
]
}
]
I'm trying to use Forrest with PHP-VCR but am experiencing an error. My test code is below, and the phpunit error is below that.
I've looked through the source code highlighted in the stack trace but can't seem to see where the CURLOPT_INFILESIZE
option should be set or how to set it. Can you help?
<?php
use VCR\VCR;
class ExampleTest extends TestCase {
/**
* @vcr SalesForceVCR
*/
public function test_intercepts_http_correctly()
{
Forrest::authenticate();
}
}
There was 1 error:
1) ExampleTest::test_intercepts_http_correctly
GuzzleHttp\Exception\RequestException: To set a CURLOPT_READFUNCTION, CURLOPT_INFILESIZE must be set.
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Client.php:201
/Users/Harrison/Sites/ubs-solomon/vendor/beberlei/assert/lib/Assert/Assertion.php:428
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/Util/CurlHelper.php:180
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:305
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:325
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:154
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php:48
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php:48
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php:84
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php:34
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Client.php:193
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Client.php:181
/Users/Harrison/Sites/ubs-solomon/vendor/omniphx/forrest/src/Omniphx/Forrest/Authentications/UserPassword.php:56
/Users/Harrison/Sites/ubs-solomon/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:205
/Users/Harrison/Sites/ubs-solomon/app/tests/functional/Solomon/Repositories/VCR/ExampleTest.php:12
/Users/Harrison/Sites/ubs-solomon/app/tests/functional/Solomon/Repositories/VCR/ExampleTest.php:12
Caused by
VCR\VCRException: To set a CURLOPT_READFUNCTION, CURLOPT_INFILESIZE must be set.
/Users/Harrison/Sites/ubs-solomon/vendor/beberlei/assert/lib/Assert/Assertion.php:193
/Users/Harrison/Sites/ubs-solomon/vendor/beberlei/assert/lib/Assert/Assertion.php:428
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/Util/CurlHelper.php:180
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:305
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:325
/Users/Harrison/Sites/ubs-solomon/vendor/php-vcr/php-vcr/src/VCR/LibraryHooks/CurlHook.php:154
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php:48
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlFactory.php:48
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/Curl/CurlAdapter.php:84
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Adapter/StreamingProxyAdapter.php:34
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Client.php:193
/Users/Harrison/Sites/ubs-solomon/vendor/guzzlehttp/guzzle/src/Client.php:181
/Users/Harrison/Sites/ubs-solomon/vendor/omniphx/forrest/src/Omniphx/Forrest/Authentications/UserPassword.php:56
/Users/Harrison/Sites/ubs-solomon/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:205
/Users/Harrison/Sites/ubs-solomon/app/tests/functional/Solomon/Repositories/VCR/ExampleTest.php:12
/Users/Harrison/Sites/ubs-solomon/app/tests/functional/Solomon/Repositories/VCR/ExampleTest.php:12
Forrest::verions() should be: Forrest::versions()
The routes included in the ForrestServiceProvider contain closures which break route caching in laravel 5.
I may have missed something but these routes dont appear to be used anywhere.
My solution was to extend the service provider and overwrite the boot method.
public function boot()
{
$this->publishes([
__DIR__.'/../../../../config/config.php' => config_path('forrest.php'),
]);
}
How could I used this plugin in a SaaS mult-tenant application. Right now, credentials are required to be stored in a config file which is not unique to all users. Is there any way to retrieve these credentials from the DB instead, allowing each user to define their own SalesForce Credentials?
We use a relay here, so I need to change that URL completely. Would be nice if it was a config option.
P.S. Your library looks very solid overall. Nice job!
In order to execute a query or any operation you previously had to execute the authenticate() method.
Where this authentication is stored? I don't want to authenticate every time so I was thinking of saving a Singleton instance of Forrest and re-use it as required.
Is there any "best practice" on how to implement this?
I'm using User-Password flow.
Thanks for this great plugin.
Regards,
--Aldo
When catching a "RequestException" in the Forrest client it'd be useful if the exception could be passed through to the "SalesforceException" (line 768-776).
For example it'd be useful to get the status code of the exception (for missing records etc.) when catching SalesforceException (at the moment you have to a regex search.. how 80's :P)
I think next() does not work. I'm in a hurry today so I can't debug it. Just getting this in here so we can look later.
[{"errorCode":"NOT_FOUND","message":"The requested resource does not exist"}]
If I change next() to get() it works fine. So I think the line below is the culprit.
$url .= '/'.$nextUrl;
This one is not actually an issue.
Every x hours, my OAuth authentication seems to expire. I need to go to the /authenticate
route.
Is it possible to avoid that? Also, I'm about to build a web project that uses massively SalesForce API to access data very often, is there a way to always have the connection between my Laravel project and SalesForce up? I don't want my end user to go to /authenticate
.
Thanks.
in my application is enabled using cors , my front end is in a domain and the back end is in another , is working properly if i don't use ajax, but when I try to log into salesforce using ajax , the following error in my callback appears :
XMLHttpRequest cannot load https://my-url-sales/services/oauth2/authorize?respon…lesforce%2Fcallback&state=https://my-url-sales. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
anyone have any solution?
When I tried updating a record using the PUT HTTP method, Salesforce API complained and said that method wasn't allowed.
Allow' => array('HEAD,GET,PATCH,DELETE')
It appears like API v33.0 wants to use the PATCH method, instead. You can simply replace method => put with method => patch and everything is ok.
No way to output format into a raw format. This would be useful to using the tooling api to output an xml or json response into a file.
Need to add a config option for raw output.
Hi, really want to use this with Laravel 5, I'm running a fresh copy of Laravel 5 but with Forrest installed I get the following error..
BadMethodCallException in ServiceProvider.php line 226:
Call to undefined method [package]
in ServiceProvider.php line 226
at ServiceProvider->__call('package', array('omniphx/forrest', null, '/home/vagrant/Code/Laravel/vendor/omniphx/forrest/src/Omniphx/Forrest/Providers/Laravel/../../../..')) in ForrestServiceProvider.php line 22
at ForrestServiceProvider->package('omniphx/forrest', null, '/home/vagrant/Code/Laravel/vendor/omniphx/forrest/src/Omniphx/Forrest/Providers/Laravel/../../../..') in ForrestServiceProvider.php line 22
at ForrestServiceProvider->boot()
at call_user_func_array(array(object(ForrestServiceProvider), 'boot'), array()) in Container.php line 523
at Container->call(array(object(ForrestServiceProvider), 'boot')) in Application.php line 631
at Application->bootProvider(object(ForrestServiceProvider)) in Application.php line 613
at Application->Illuminate\Foundation{closure}(object(ForrestServiceProvider), '19')
at array_walk(array(object(EventServiceProvider), object(RoutingServiceProvider), object(AuthServiceProvider), object(ControllerServiceProvider), object(CookieServiceProvider), object(DatabaseServiceProvider), object(EncryptionServiceProvider), object(FilesystemServiceProvider), object(FormRequestServiceProvider), object(FoundationServiceProvider), object(PaginationServiceProvider), object(SessionServiceProvider), object(ValidationServiceProvider), object(ViewServiceProvider), object(AppServiceProvider), object(BusServiceProvider), object(ConfigServiceProvider), object(EventServiceProvider), object(RouteServiceProvider), object(ForrestServiceProvider), object(BusServiceProvider)), object(Closure)) in Application.php line 614
at Application->boot() in BootProviders.php line 15
at BootProviders->bootstrap(object(Application)) in Application.php line 165
at Application->bootstrapWith(array('Illuminate\Foundation\Bootstrap\DetectEnvironment', 'Illuminate\Foundation\Bootstrap\LoadConfiguration', 'Illuminate\Foundation\Bootstrap\ConfigureLogging', 'Illuminate\Foundation\Bootstrap\HandleExceptions', 'Illuminate\Foundation\Bootstrap\RegisterFacades', 'Illuminate\Foundation\Bootstrap\RegisterProviders', 'Illuminate\Foundation\Bootstrap\BootProviders')) in Kernel.php line 142
at Kernel->bootstrap() in Kernel.php line 103
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 83
at Kernel->handle(object(Request)) in index.php line 53
Hope you can help I'm keen to build a app for SalesForce using this.
Thanks in advance
Hi,
I am using your forrest package to integrate with salesforce, so far it is has been great. Thanks for the package!
I was wondering if it is possible to do atomic transaction while using the rest api within this package? I am asking because I want to test my salesforce repository but want to roll back after a test runs.
If not, do you know if there is an easy way to clean the db back to a predefined state so that I can easily run my tests against a know valid state?
Thanks,
Vasi
Hi,
Config::get('forrest::authRedirect');
did not work for me, I needed to change it to Config::get('forrest.authRedirect');
Also the expire_in setting doesnt work for me, it always sets it to 20 minutes.
Lastly, is there an option to set the refresh token to never expire?
Currently working on integrating the Salesforce Streaming API into an application. Having to use node.js server with redis pub/sub.
https://developer.salesforce.com/page/Getting_Started_with_the_Force.com_Streaming_API
It would be amazing to have functionality for this built into this package.
Here is the npm package I am using to implement this:
https://github.com/kevinohara80/nforce
I have set up the library using Composer as detailed and entered my credentials in the config files.
When I call Forrest::authenticate()
, I receive the following error:
Client error response [url] https://login.salesforce.com/services/oauth2/token [status code] 400 [reason phrase] Bad Request
It occurs when we try and post the data:
$response = $this->client->post($tokenURL, $parameters);
Any clues as to the issue?
We are using your package. It's been working fine. But from today we are getting the above error. I checked the salesforce response. It's giving us this repose: TLS 1.0 has been disabled in this organization. Please use TLS 1.1 or higher when connecting to Salesforce using https. I think now slaesfore require to use TLS1.1 for connection. You can look this page: https://help.salesforce.com/apex/HTViewSolution?id=000221207. Is there anything we need to do or you have to fix the issue?
I added "omniphx/forrest": "2.0.*@dev"
in composer.json.
I adde services provider and alias. Then, I ran php artisan vendor:publish
On CLI, I got Publishing complete for tag []!
I noticed forrest.php is not generated.
Did I do anything wrong ? Is it an intended behavior ? Please kindly advise.
FatalThrowableError in UserPassword.php line 15:
Type error: Argument 2 passed to Omniphx\Forrest\Authentications\UserPassword::__construct() must implement interface Omniphx\Forrest\Interfaces\EventInterface, instance of Omniphx\Forrest\Providers\Laravel\LaravelCache given, called in /home/vagrant/Code/api2.gohubble.com/vendor/omniphx/forrest/src/Omniphx/Forrest/Providers/Lumen/ForrestServiceProvider.php on line 64
This happened after I updated from version 5.2.0 to the latest version.
I get the following exception on callback, please note that there is no option to actually configure refresh tokens, in salesforce under manage my app the refresh token policy is set to "Immediately expire refresh token" there is no option to choose anything else..
in WebServer.php line 129 at HandleExceptions->handleError('8', 'Undefined index: refresh_token', 'E:\Code\vzm\vendor\omniphx\forrest\src\Omniphx\Forrest\Authentications\WebServer.php', '129', array('code' => 'dasdfasdf', 'tokenURL' => 'https://test.salesforce.com/services/oauth2/token', 'response' => object(Response), 'jsonResponse' => array('access_token' => 'asdfasd', 'signature' => 'asdfasdf', 'scope' => 'full', 'id_token' => 'asdf', 'instance_url' => 'https://cs80.salesforce.com', 'id' => 'https://test.salesforce.com/id/asdfasdf', 'token_type' => 'Bearer', 'issued_at' => '1455798605702'))) in WebServer.php line 129
When successfully updating a Record (using format = JSON), Salesforce returns a response code of 200 and no response body (Salesforce REST API Docs).
It seems that Guzzle (5.3) is trying to json_encode
the empty response.
I get the following error:
ParseException in Response.php line 148: Unable to parse JSON data: JSON_ERROR_SYNTAX - Syntax error, malformed JSON
Is there a way to continue to make the request using JSON and but avoid the ParseException?
Thanks for your help.
Hey, got a slight problem I was wondering if you could help. I have also tested with different versions of forrest
Using
app/config/session
composer
I keep getting the error
'Omniphx\Forrest\Exceptions\MissingTokenException' with message 'No token available in current session'
I am using this project in a demo app that I'm building. The only problem is that I need to use a different authentication flow (username and password in this case).
I did a terrible hack to get it working locally for my demo. I'd like to see if you have any ideas or recommendations such that the codebase could be refactored in a clean way to support all of the additional flow types?
Thanks!
Has anyone gotten this to run in Lumen? I get this
Class session does not exist
Here's the relevant part of the stack trace:
in Container.php line 738
at ReflectionClass->__construct('session') in Container.php line 738
at Container->build('session', array()) in Container.php line 633
at Container->make('session', array()) in Application.php line 205
at Application->make('session', array()) in helpers.php line 39
at app('session') in ForrestServiceProvider.php line 58
at ForrestServiceProvider->Omniphx\Forrest\Providers\Lumen\{closure}(object(Application), array()) in Container.php line 735
at Container->build(object(Closure), array()) in Container.php line 633
at Container->make('forrest', array()) in Application.php line 205
at Application->make('forrest') in Container.php line 1178
at Container->offsetGet('forrest') in Facade.php line 151
at Facade::resolveFacadeInstance('forrest') in Facade.php line 120
at Facade::getFacadeRoot() in Facade.php line 207
at Facade::__callStatic('authenticate', array()) in Monetization.php line 141
at Forrest::authenticate() in Monetization.php line 141
Hello
When using the UserPassword authentication method and using Forrest::authenticate
I notice it calls ->storeResources
upon each authentication, which then fetches the resource list.
This request each time gets a list of available resources from Salesforce, for example:
{"tooling":"/services/data/v36.0/tooling","chatter":"/services/data/v36.0/chatter","tabs":"/services/data/v36.0/tabs","appMenu":"/services/data/v36.0/appMenu","quickActions":"/services/data/v36.0/quickActions","queryAll":"/services/data/v36.0/queryAll","commerce":"/services/data/v36.0/commerce","wave":"/services/data/v36.0/wave","exchange-connect":"/services/data/v36.0/exchange-connect",...}
Would it make sense to cache this result rather than cause a x3 on each request (authenticate, get resources and original request)? :)
Why if I var_dump() the result of Forrest::sobjects() I get false if something went wrong?
I was hopping getting SalesForce error message, no?
What do you think about a retry option to have this library auto-retry to connect to Salesforce on 500 or 503 or errors? Default it to 0 retries (obviously), but allow something like ..
$response = Forrest::sobjects($resource,[
'body' => $params,
'retries' => 2,
]);
In the config it is implied that the "version" variable is optional however there is an error when the value is empty. Perhaps a wording change with a default value.
As soon as I try to create/update a sObject using:
$body = ['Name' => 'New Account'];
Forrest::sobject('Account',[
'method' => 'post',
'body' => $body]);
I get the ErrorException (E_UNKNOWN) saying "Undefined index: sobject"
I have a long-running PHP process with the following storage configuration:
...
...
...
'storage' => [
'type' => 'session', // 'session' or 'cache' are the two options
'path' => 'forrest_', // unique storage path to avoid collisions
'expire_in' => 10080, // number of minutes to expire cache/session
],
...
...
...
It works fine for a few hours... but then after a few hours, I get Undefined index sobjects. The error occurs in Client.php (586):
...
...
...
public function __call($name, $arguments)
{
$url = $this->getInstanceUrl();
$url .= $this->storage->get('resources')[$name]; // <- error on this line
$options = [];
...
...
...
Will post trace later.
It's probably because of how laravel handles session expiry. Graceful handling of this would be helpful.
I've just had an email from SalesForce saying:
"Over the next 12 months, Salesforce is preparing to disable TLS 1.0 encryption in a phased approach to prevent it from being used to access the Salesforce service during inbound and outbound connections. [...] After Salesforce disables TLS 1.0 encryption, any channels connecting to Salesforce will need to use TLS 1.1 encryption or higher. Channels attempting to connect to Salesforce using encryption protocols lower than TLS 1.1 will NOT be able to connect to Salesforce. This includes browsers and any integrations to Salesforce APIs using unsupported encryption protocols."
Do you know whether this affects Forrest or does it use a different protocol to connect?
Thanks, Harrison
First off, great package.
Working on an application where I want users to use WebServer authentication, but I would like to be able to have backend scheduled processes use UserPassword authentication such that I can aggregate expensive SOQL results.
Currently any way of doing this?
Config::set('forrest.authentication', 'UserPassword');
?
Hi There
In my logout function
Route::get('/logout', function () {
Forrest::revoke();
Session::flush();
return return Redirect::to('/');
})
It doesn't work. no matter this inside or outside the group middleware.
or Are there ways I can make forrest_token to '' so that it can not login salesforce when logout is click?
Thanks!
In my use case, the user will authenticate via oAuth once, and then we will use their token to make subsequent requests on their behalf. At the moment it looks like your library relies on the presence of a session with the accessToken etc.
I would want to store those in the database, and then use them when needed, do you have any examples of how I can store the necessary parameters after Forrest::authenticate() has been called, also also how to create an instance of Forrest with parameters I have stored in a DB.
Appreciate your help!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.