Search code examples
iosiphonelaravelauthenticationdingo-api

How to authenticate user with token (stay authenticated in iPhone)


I have two related questions and I hope someone help me because I've been stuck for 2 days

First: mobile phone failed to authenticate

Here is what I have done:

1- user signs up

2- token released

3- token saved in user's device

but then when the same user try to do API requests I get

Rooute to sign up :

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->post('auth/signup', 'App\Api\V1\Controllers\AuthController@signup');

then I get a token , so I guess everything looks great! then now when the same device sends a post request to laravel I get this message

"message": "Failed to authenticate because of bad credentials or an invalid authorization header."

this is the route to the post request

 $api->group(['middleware'=>'api.auth'],
    function ($api)   {
$api->post('auth/ios', 'App\Api\V1\Controllers\AuthController@create');

Second: is my method right to save data made by a mobile phone?

Since I couldn't test this method I'd like to know if this is at least one of the right ways to receive data and save it. The reason to save it is because I will show it in a control panel.

 public function create(Request $request)
{

    $user = new User();
    $id = Auth::id();
    $user->phone = $request->input('phone');
    $user->city = $request->input('city');
    $user->street = $request->input('street');
    $user->save();

    return 'Employee record successfully created with id ' . $user->id;


}

Solution

  • I understand that you are authenticate users based on api token.

    Here is what you could do :

    1. set up a column called api_token in users table by adding the following migration $table->string('api_token', 60)->unique();.This generates a random api token for every user.
    2. send the api_token back to the user's device and save it there
    3. Send it back with every request. Preferalbly set it up globally and send it in the request Authentication request header
    4. Get the authenticated user like so$user= Auth::guard('api')->user();

    Laravel takes care of all the authentication stuff behind the scenes.

    Learn More about this here