Cornel Verster
Cornel Verster

Reputation: 1783

Laravel - Nexmo not picking up credentials in .ENV file

I recently added laravel/nexmo-notification-channel to my laravel project which also installed Nexmo/nexmo-laravel.

After installing, I published vendor files so that I get config/nexmo.php and in there I noted that it looks in the .env file for NEXMO_KEY and NEXMO_SECRET.

So I went ahead and created these within my .env file

NEXMO_KEY=[my_key]
NEXMO_SECRET=[my secret]
NEXMO_SIGNATURE_SECRET=[my signature secret]

After this, I added Nexmo to my service providers in app.php:

'providers' => [
    ...,
    Nexmo\Laravel\NexmoServiceProvider::class
]

and also added the following in config/services.php:

'nexmo' => [
    'key' => env('NEXMO_KEY', ''),
    'secret' => env('NEXMO_SECRET', ''),
    'sms_from' => '[my number]'
],

But I still get the following error when thrying to send an SMS using the use Illuminate\Notifications\Messages\NexmoMessage; class:

"message": "Provide either nexmo.api_secret or nexmo.signature_secret",

I can use these same credentials to send an SMS from CLI, so why can't I send it from laravel?

Upvotes: 1

Views: 524

Answers (2)

Jim
Jim

Reputation: 11

There have been a couple of workarounds for this that are valid, but at first glance it looks like the Nexmo package does the work to bring in the ENV secrets into Laravel's config. Because of caching problems, you should never call env() within Laravel, instead you should be using config() - so in this case, config(nexmo.api_secret).

My main point here though is that I can't look into the "correct" solution for you because the package is abandoned. Nexmo is no longer Nexmo, it's Vonage, and Laravel core team have subsequently updated the notification-channel package.

For supported use to integrate Vonage services (SMS), please use the following package:

https://github.com/laravel/vonage-notification-channel

Upvotes: 1

Platinum
Platinum

Reputation: 98

I'm not sure exactly why, but, Vonage/Nexmo doesn't pick details from the .ENV.

Instead, use a global constant to fetch the secrets:

Create a global.php file in the config folder, and add your secrets from the env like this:

<?php

return [
  // Other constants values
  'SMS_API_KEY' => env('SMS_API_KEY', ''),
  'SMS_API_SECRET' => env('SMS_API_SECRET', ''),
]

?>

Then, you can use the constants in your controller as usual:

   'key' => config('global.SMS_API_KEY'),
   'secret' => config('global.SMS_API_SECRET')

then: recache, php artisan config:cache

Upvotes: 0

Related Questions