Php Laravel团队合作邀请没有帐户的人

Php Laravel团队合作邀请没有帐户的人,php,laravel,laravel-5,Php,Laravel,Laravel 5,我将Laravel 5.4与团队合作模块一起使用: 该模块设置为向用户(即已拥有帐户的用户)发送邀请以加入邀请者。我想邀请尚未拥有帐户的潜在用户,允许他们创建一个帐户并一步加入团队 这是控制器中的当前acceptInvite函数: public function acceptInvite($token) { $invite = Teamwork::getInviteFromAcceptToken($token); if (!$invite) { abort(40

我将Laravel 5.4与团队合作模块一起使用:

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

这是控制器中的当前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');
    }
}
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
        ...
    }
}
所以我把它改为重定向到注册页面而不是登录页面。这是RegisterController中的创建函数:

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');
    }
}
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($invite)在Debugbar中生成以下内容:

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

但是邀请不被接受。我知道如果($invite)因为没有创建新团队而起作用。我做错了什么?

在调用
团队合作::接受邀请($invite)
之前,您正在进行
返回$user
。交换这些行,它应该可以工作:

if ($invite) {

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

} else {

    //create a team
    ...
}
在函数内调用
return
将结束其执行。更多信息请参见

如果在交换此行后出现下一个错误:

FatalThrowableError Call to a member function attachTeam() on null
可能是因为您试图在用户通过身份验证之前接受邀请

您可以在调用
团队协作::acceptInvite($invite)
之前尝试对其进行身份验证,如下所示:

if ($invite) {

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

    Teamwork::acceptInvite($invite);

    return $user;

} else {

    //create a team
    ...
}
if($invite){
团队合作:接受邀请($invite);
返回$user;
}

我这样做的原因是我遇到了以下错误:
FatalThrowableError调用成员函数attachTeam()时为null
这是由
teamworking::acceptInvite($invite)引起的
line根据谷歌搜索,这是因为没有加载任何用户。这可能是因为用户尚未通过身份验证。我正在更新我的答案,提出一些解决这个问题的建议。