Php Laravel团队合作邀请没有帐户的人
我将Laravel 5.4与团队合作模块一起使用: 该模块设置为向用户(即已拥有帐户的用户)发送邀请以加入邀请者。我想邀请尚未拥有帐户的潜在用户,允许他们创建一个帐户并一步加入团队 这是控制器中的当前acceptInvite函数: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
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根据谷歌搜索,这是因为没有加载任何用户。这可能是因为用户尚未通过身份验证。我正在更新我的答案,提出一些解决这个问题的建议。