laravel-microsoft-graph icon indicating copy to clipboard operation
laravel-microsoft-graph copied to clipboard

User is not being added to database

Open Devannn opened this issue 2 years ago • 7 comments

Hello, when i try to log in with microsoft everything works fine and i get redirected to my MSGRAPH_LANDING_URL= but the account is not being added to the database.

Devannn avatar Jun 08 '22 08:06 Devannn

I've run through this and it's working on a new install, the user_id will be blank but I can see the email and token

dcblogdev avatar Aug 09 '22 09:08 dcblogdev

@Devannn, do you speak about the token or user informations which are not added in database ?

Also I your recommand to look at this video in order check your app registration is correct on Azure AD though Postman. https://www.youtube.com/watch?v=hWP-8QhiTeM If Postman retrun the token from Azure AD, your a ready to use dcblogdev/laravel-microsoft-graph

innovaweb-dev avatar Aug 09 '22 16:08 innovaweb-dev

The user_is is empty when login in with graph but the email and tokens will be set, you can see this in this video. https://www.youtube.com/watch?v=fvgd2RYc3G0

dcblogdev avatar Aug 09 '22 18:08 dcblogdev

I just look at for your video @dcblogdev it is very appreciated 👍

However, I think that I have the same problem of @Devannn. The access_token adds well on ms_graph_token table, but the users table keep empty. Also when a new user logs, the previous token is replaced by the new token although if user is different.

So, if you look at NewMicrosoft365SignInListener, normally the user should be add in users table. At what moment NewMicrosoft365SignInListener is trigger ?


I put this video to expose the problem. https://user-images.githubusercontent.com/2601347/183756367-eaacf1be-d8e5-4e0f-bd5e-f280acd7bad9.mp4

Thanks,

innovaweb-dev avatar Aug 09 '22 20:08 innovaweb-dev

@Devannn @dcblogdev I have found the problem, the NewMicrosoft365SignInListener and NewMicrosoft365SignInEvent are not registred so not triggerd. Laravel 9.23

// app\Providers\EventServiceProvider 
<?php

namespace App\Providers\EventServiceProvider;

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

use Dcblogdev\MsGraph\Events\NewMicrosoft365SignInEvent;
use App\Listeners\NewMicrosoft365SignInListener;

class EventServiceProvider extends ServiceProvider
{

    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
    ];

    public function boot()
    {
        Event::listen(
            NewMicrosoft365SignInEvent::class,
            [NewMicrosoft365SignInListener::class, 'handle']
        );
    }

    public function shouldDiscoverEvents()
    {
        return false;
    }
}

innovaweb-dev avatar Aug 10 '22 08:08 innovaweb-dev

ahh I see what you mean, thanks for helping to clear this up

dcblogdev avatar Aug 10 '22 08:08 dcblogdev

I think there are other problems in the code.

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'users_email_unique'

if ($token->user_id == null) {
    $user = User::create(['name'     => $event->token['info']['displayName'],
        'email'    => $event->token['info']['mail'],
         'password' => '']);

This Is normal because $token->user_id always null, but if the user did connected in the past he is aleary exist on users table with a identique email at the email of $token.


Do you want to I create a new issue or we continue here ?

innovaweb-dev avatar Aug 10 '22 10:08 innovaweb-dev

when the event listerner is added to the event service provider that appears to solve the problem. If not please open a new issue.

dcblogdev avatar Sep 04 '22 11:09 dcblogdev