如何将OAuth客户端身份验证与Laravel标准身份验证集成在一起?

时间:2014-08-06 01:24:22

标签: php authentication laravel oauth eloquent

我已经谷歌搜索了一段时间了解有关如何将OAuth(v1.0& v2.0)与标准的Laravel 4 Eloquent身份验证驱动程序集成的一些想法或指南。

基本上,我希望网站访问者能够通过现有的Google,Facebook或Twitter帐户或通过标准的电子邮件/密码身份验证创建帐户。某些用户信息(如电子邮件,名字和姓氏以及头像)对我来说非常重要,因为它存储在统一的users表格中。

到目前为止,我所看到的项目似乎只支持OAuth并取消了标准方法。这些项目包括:eloquent-oauthoauth-4-laravel

此时,我可能只是推出自己的解决方案,但我希望你们中的一些人可能对我有更好的建议!

TL; DR :我一直试图找到一种简单安全的方式来在Laravel中允许OAuth和标准的Eloquent用户身份验证。 HALP。

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用您提到的服务提供商" artdarek / oauth-4-laravel"然后像往常一样存储值并将其记录下来。

 /**
 * Login user with facebook
 *
 * @return void
 */

public function loginWithFacebook() {

    // get data from input
    $code = Input::get( 'code' );

    // get fb service
    $fb = OAuth::consumer( 'Facebook' );

    // check if code is valid

    // if code is provided get user data and sign in
    if ( !empty( $code ) ) {

        // This was a callback request from facebook, get the token
        $token = $fb->requestAccessToken( $code );

        // Send a request with it
        $result = json_decode( $fb->request( '/me' ), true );

        // store new user or login if user exists
        $validator = Validator::make($result, array(
            'email'=>'required|email|unique:users'
        ));

        if ($validator->passes()) {
            # Save user in DB
            $user = new User;
            $user->username = $result['name'];
            $user->email = $result['email'];
            $user->save();
        }else {
            $user = User::findByUsernameOrFail($result['name']);
        }

        Auth::login($user);

    }
    // if not ask for permission first
    else {
        // get fb authorization
        $url = $fb->getAuthorizationUri();

        // return to facebook login url
         return Redirect::to( (string)$url );
    }

}