簡體   English   中英

Laravel 6 不需要電子郵件驗證即可進行社交登錄

[英]Laravel 6 not require email verification to social login

我是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;
}
}

您可能有一列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()
]);

不要像@Raftel 提到的那樣使用它! 當您將email_verified_at添加到$fillable email_verified_at變量時,黑客可以通過發送隱藏輸入(例如<input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ >來破壞您的整個電子郵件驗證<input type="hidden" name="email_verified_at" value="<?php echo now() ?>"/ > ...

您可以在稱為forceFill()雄辯模型上使用未記錄的方法: https : //www.mike-griffiths.co.uk/blog/laravels-forcefill-and-forcecreate/

您可以使用 markEmailAsVerified()

$user = User::create([
    'name'     => $getInfo->name,
    'email'    => $getInfo->email,
    'provider' => $provider,
    'provider_id' => $getInfo->id,

]);
$user->markEmailAsVerified();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM