2017-10-08 76 views
0

我使用Laravel 5.4与团队协作模块:Laravel团队邀请某人没有一个帐户

https://github.com/mpociot/teamwork

模块设置为发送邀请给用户(即谁已经有一个帐户的人)加入邀请者。我想邀请尚未拥有帐户的潜在用户,让他们创建一个并一步加入团队。

这是团队合作AuthController当前acceptInvite功能:

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'); 
    } 
} 

所以我已经改变了它重定向到注册页面,而不是登录页面。那么这就是在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 ::信息($邀请)在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" 
] 

但邀请是不能接受的。我知道如果($ invite)正在工作,因为没有创建新的团队。我在这里做错了什么?

回答

1

在致电Teamwork::acceptInvite($invite)之前,您正在制作return $user。这种互换行,它应该工作:

if ($invite) { 

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

} else { 

    //create a team 
    ... 
} 

调用return在函数内部将结束它的执行。详情请见PHP manual

如果换这行后,你会得到一个错误:

FatalThrowableError Call to a member function attachTeam() on null 

可能是因为你正试图接受用户进行身份验证之前的邀请。

你可以尝试调用Teamwork::acceptInvite($invite)这样之前认证它:

if ($invite) { 

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

    Teamwork::acceptInvite($invite); 

    return $user; 

} else { 

    //create a team 
    ... 
} 
+0

我之所以这样做,是,我发现了以下错误:在null' 'FatalThrowableError 调用一个成员函数attachTeam()这是由'Teamwork :: acceptInvite($ invite)'行引起的,根据谷歌搜索是由于没有用户被加载。 – matt9292

+1

这可能是因为用户尚未认证。我正在更新我的答案,并提出了一些解决此问题的建议。 – Camilo