2017-10-08 1 views
0

J'utilise Laravel 5.4 avec le module de travail d'équipe:Laravel Travail d'équipe inviter quelqu'un sans un compte

https://github.com/mpociot/teamwork

Le module est configuré pour envoyer des invitations aux utilisateurs (.-À-dire les personnes qui ont déjà un compte) pour rejoindre l'hôte. Je voudrais inviter les utilisateurs potentiels qui n'ont pas encore de compte, à leur permettre d'en créer un et de rejoindre l'équipe en une seule étape.

Ceci est la fonction acceptInvite actuelle dans le travail d'équipe AuthController:

public function acceptInvite($token) 
{ 
    $invite = Teamwork::getInviteFromAcceptToken($token); 
    if (!$invite) { 
     abort(404); 
    } 

    if (auth()->check()) { 
     Teamwork::acceptInvite($invite); 
     return redirect()->route('teams.index'); 
    } else { 
     session(['invite_token' => $token]); 
     return redirect()->to('login'); 
    } 
} 

J'ai donc changé pour rediriger vers la page d'inscription au lieu de la page de connexion. Ensuite, c'est la fonction de création dans le RegisterController:

protected function create(array $data) 
{ 
    $user = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 

    ]); 

    $id= $user->id; // Get current user id 

    $token = session('invite_token'); 
    $invite = Teamwork::getInviteFromAcceptToken($token); 

    Debugbar::info($invite); 

    if ($invite) { 

     return $user; 
     Teamwork::acceptInvite($invite); 

    } else { 

     //create a team 
     ... 
    } 
} 

DebugBar :: info ($ qu'inviter) dans le code ci-dessus produit ce dans le debugbar:

#original: array:9 [ 
    "id" => 4 
    "user_id" => 13 
    "team_id" => 11 
    "type" => "invite" 
    "email" => "[email protected]" 
    "accept_token" => "ddde37c58aa6376533fa289c89bee32e" 
    "deny_token" => "450b433bd51b2520a78c24563e8c81c9" 
    "created_at" => "2017-10-08 20:58:45" 
    "updated_at" => "2017-10-08 20:58:45" 
] 

Mais l'invitation est pas acceptée. Je sais que si ($ invite) fonctionne parce qu'une nouvelle équipe n'est pas créée. Qu'est-ce que je fais mal ici?

Répondre

1

Vous effectuez un return $user avant d'appeler Teamwork::acceptInvite($invite). Échanger ces lignes et il devrait fonctionner:

if ($invite) { 

    Teamwork::acceptInvite($invite); 
    return $user; 

} else { 

    //create a team 
    ... 
} 

Appel return dans une fonction mettra fin à son exécution. Voir plus sur le PHP manual.

Si après avoir échangé ces lignes vous obtenez l'erreur suivante:

FatalThrowableError Call to a member function attachTeam() on null 

est probablement parce que vous essayez d'accepter une invitation avant que l'utilisateur est authentifié.

Vous pouvez authentifier avant d'appeler Teamwork::acceptInvite($invite) comme ceci:

if ($invite) { 

    Auth::attempt([ 
     'email' => $data['email'], 
     'password' => $data['password'] 
    ]); 

    Teamwork::acceptInvite($invite); 

    return $user; 

} else { 

    //create a team 
    ... 
} 
+0

La raison pour laquelle je l'ai fait était que je recevais l'erreur suivante: 'FatalThrowableError appel à une fonction de membre attachTeam() sur null' Cela est dû à la ligne 'Teamwork :: acceptInvite ($ invite)' et selon une recherche google, aucun utilisateur n'est chargé. – matt9292

+1

C'est probablement parce que l'utilisateur n'est pas encore authentifié. Je mets à jour ma réponse avec quelques suggestions pour résoudre ce problème. – Camilo