我已经尝试了答案中的所有类似问题,但我仍然卡在这个错误中,请帮帮我。我知道它是从哪里来的,但我不知道如何解决这个问题。
<?php
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/verify';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'mobile' => ['required', 'min:10'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $request
* @return string
* @throws \Twilio\Exceptions\ConfigurationException
*/
protected function create(array $data)
{
/* Get credentials from .env */
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio_sid = getenv("TWILIO_SID");
$twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
$twilio = new Client($twilio_sid, $token);
$twilio->verify->v2->services($twilio_verify_sid)
->verifications
->create('+977'.$data['mobile'], "sms");
User::create([
'name' => $data['name'],
'mobile' => $data['mobile'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
return redirect()->route('verify')->with('mobile', $data->mobile);
}
protected function verify(Request $request)
{
$data = $request->validate([
'otp' => ['required', 'numeric'],
'mobile' => ['required', 'string'],
]);
/* Get credentials from .env */
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio_sid = getenv("TWILIO_SID");
$twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
$twilio = new Client($twilio_sid, $token);
$verification = $twilio->verify->v2->services($twilio_verify_sid)
->verificationChecks
->create($data['otp'], array('to' => $data['mobile']));
if ($verification->valid) {
$user = tap(User::where('mobile', $data['mobile']))->update(['isVerified' => true]);
/* Authenticate user */
Auth::login($user->first());
return redirect()->route('dashboard')->with(['message' => 'Phone number verified']);
}
return back()->with(['mobile' => $data['mobile'], 'error' => 'Invalid verification code entered!']);
}}
这是我的路线:
<?php
Route::get('/', 'HomeController@index');
Auth::routes();
Route::get('/verify', function () {
return view('backend.verify');
})->name('verify');
Route::get('/', function () {
return view('auth.register');
})->name('register');
Route::get('/dashboard', 'HomeController@index')->name('home');
Route::post('/verify', 'RegisterController@verify')->name('verify');
Route::group(['middleware' => 'auth'], function () {
Route::resource('user', 'UserController', ['except' => ['show']]);
Route::get('profile', ['as' => 'profile.edit', 'uses' => 'ProfileController@edit']);
Route::put('profile', ['as' => 'profile.update', 'uses' => 'ProfileController@update']);
Route::put('profile/password', ['as' => 'profile.password', 'uses' => 'ProfileController@password']);
});我可以添加代码,如果有必要,谢谢。我认为问题出在重定向到路由验证的create函数中,错误是:

发布于 2020-11-18 00:06:51
Create方法必须返回$user对象。您不能从RegisterController的create方法重定向到任何路由。有一些方法可以处理这个问题。
在web.php中覆盖您的默认注册路由,如下所示。
Route::post('/register', 'Auth\RegisterController@created')->name('register');然后在您的注册控制器中,将params从类型array更改为like \Http\Request,如下所示。
protected function created(Request $data)
{
/* Get credentials from .env */
$token = getenv("TWILIO_AUTH_TOKEN");
$twilio_sid = getenv("TWILIO_SID");
$twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
$twilio = new Client($twilio_sid, $token);
$twilio->verify->v2->services($twilio_verify_sid)
->verifications
->create('+977'.$data->mobile, "sms");
User::create([
'name' => $data->name,
'mobile' => $data->mobile,
'email' => $data->email,
'password' => Hash::make($data->password),
]);
return redirect()->route('verify')->with('mobile', $data->mobile);
}希望这能解决你的问题。:)
发布于 2020-11-18 00:37:19
也许可以尝试一下,而不是:
$user = tap(User::where('mobile', $data['mobile']))->update(['isVerified' => true]);
只是
$user = User::where('mobile', $data['mobile'])->get()->first()->update(['isVerified' => true]);
然后是Auth::login($user);
我假设User模型扩展了Authenticatable
https://stackoverflow.com/questions/64878811
复制相似问题