Laravel 6 不需要电子邮件验证即可进行社交登录

我是laravel的新手。我已经使用 auth 命令创建了登录和注册表单。


我已经激活了用于登录的电子邮件验证。此外,我还使用基于以下链接的社交名流为 Gmail、Fb 等创建了社交登录。


https://www.tutsmake.com/laravel-6-google-login-tutorial-with-socialite-demo-example/


现在,我不需要对那些通过社交登录但手动注册的用户进行电子邮件验证。


我的家庭控制器


namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;

use Illuminate\Http\Request;


class HomeController extends Controller

{

/**

 * Create a new controller instance.

 *

 * @return void

 */

public function __construct()

{

     $this->middleware(['auth', 'verified']);

}


/**

 * Show the application dashboard.

 *

 * @return \Illuminate\Contracts\Support\Renderable

 */

public function index()

{

    return view('frontend.index');

}

public function seedr()

{

    $users=DB::table('users')->get();


    return view('backend.seedr',['users'=>$users]);

}


}

我的社交控制器


namespace App\Http\Controllers;


use Illuminate\Http\Request;

use Validator,Redirect,Response,File;

use Socialite;


use App\User;

class SocialController extends Controller

{

   public function redirect($provider)

  {

    //echo $provider;die;

    return Socialite::driver($provider)->redirect();

  }


  public function callback($provider)

 {


   $getInfo = Socialite::driver($provider)->user();


   $user = $this->createUser($getInfo,$provider);


  auth()->login($user);


  return redirect()->to('/home');


 }

 function createUser($getInfo,$provider){


  $user = User::where('provider_id', $getInfo->id)->first();


 if (!$user) {

  //$mytime = Carbon::now();

 $currenttime=date("Y-m-d h:i:s a", time());


 $user = User::create([

    'name'     => $getInfo->name,

    'email'    => $getInfo->email,

    'provider' => $provider,

    'provider_id' => $getInfo->id,


]);

 //die;

}

return $user;

}

}


30秒到达战场
浏览 154回答 3
3回答

偶然的你

您可能有一列email_verified_at存储验证电子邮件地址的日期,默认情况下,null这意味着用户未通过验证。在您SocialController@createUser将其设置为当前日期: $user = User::create([    'name'     => $getInfo->name,    'email'    => $getInfo->email,    'provider' => $provider,    'provider_id' => $getInfo->id,    'email_verified_at' => now()]);

Cats萌萌

您可以使用 markEmailAsVerified()$user = User::create([    'name'     => $getInfo->name,    'email'    => $getInfo->email,    'provider' => $provider,    'provider_id' => $getInfo->id,]);$user->markEmailAsVerified();

精慕HU

不要像@Raftel 提到的那样使用它!当您添加email_verified_at到$fillable变量时,黑客可以通过发送隐藏的输入(例如<input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ >...您可以在调用的雄辩模型上使用未记录的方法forceFill():https ://www.mike-griffiths.co.uk/blog/laravels-forcefill-and-forcecreate/
打开App,查看更多内容
随时随地看视频慕课网APP