当前位置: 首页 > 知识库问答 >
问题:

Laravel 4使用Facebook进行身份验证(无密码验证)

宓诚
2023-03-14

我试图建立一个认证系统与Laravel 4与Facebook登录。我正在使用Laravel 4的madewith love/laravel-oAuth2包。

当然,当用户登录Facebook时,没有密码可以添加到我的数据库中。但是,我正在尝试检查数据库中是否已经有用户id,以确定是否应该创建一个新实体,或者只是登录当前实体。我想使用Auth命令来实现这一点。我有一张叫做“粉丝”的桌子。

这就是我正在处理的问题:

 $fan = Fan::where('fbid', '=', $user['uid']);

                if(is_null($fan)) {

                  $fan = new Fan;

                  $fan->fbid = $user['uid'];
                  $fan->email = $user['email'];
                  $fan->first_name = $user['first_name'];
                  $fan->last_name = $user['last_name'];
                  $fan->gender = $user['gender'];
                  $fan->birthday = $user['birthday'];
                $fan->age = $age;
                $fan->city = $city;
                $fan->state = $state;
                  $fan->image = $user['image'];

                  $fan->save();

                  return Redirect::to('fans/home');

                }

                else {

                  Auth::login($fan);
                  return Redirect::to('fans/home');

               }

风扇型号:

<?php

class Fan extends Eloquent {
    protected $guarded = array();

    public static $rules = array();
}

当我运行此操作时,我会得到以下错误:

Argument 1 passed to Illuminate\Auth\Guard::login() must be an instance of Illuminate\Auth\UserInterface, instance of Illuminate\Database\Eloquent\Builder given

编辑:当我使用时:$fan=fan::where('fbid','=',$user['uid'])-

我得到的错误:

Argument 1 passed to Illuminate\Auth\Guard::login() must be an instance of Illuminate\Auth\UserInterface, null given, called in /Applications/MAMP/htdocs/crowdsets/laravel-master/vendor/laravel/framework/src/Illuminate/Auth/Guard.php on line 368 and defined

我不知道为什么它给我这个错误。你对我如何完成这项工作有什么建议吗?谢谢你的帮助。


共有2个答案

微生承业
2023-03-14

要将任何用户登录到系统中,您需要使用User模型,我打赌继承的类也能做到这一点,但我不确定。

无论如何,您的fan模型与User模型/表没有任何关联,这是一个问题。如果你的模型有一个belong_tohas_one关系和一个user_id字段,那么你可以用Auth::loginUSingId(

原始答复:

您缺少一个额外的方法调用:-

$fan = Fan::where('fbid', '=', $user['uid'])->first();

或者,您可以抛出异常以查看发生了什么:

$fan = Fan::where('fbid', '=', $user['uid'])->firstOrFail();

如果您看到不同的错误,请使用这些错误更新您的问题。

戚云
2023-03-14

您必须实现UserInterface到您的模型,以便Auth正常工作

use Illuminate\Auth\UserInterface;
class Fan extends Eloquent implements UserInterface{
...
public function getAuthIdentifier()
{
    return $this->getKey();
}

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->password;
}
}

getAuth标识符和getAuthPassword是抽象方法,必须在实现UserInterface的类中实现

 类似资料:
  • 我正在使用生成用户密码的强哈希值。我想登录用户,但不想通过网络以明文形式发送密码,如何检查密码是否正确(没有往返),因为它是加盐的? 我有一个客户端/服务器场景。客户端是台式计算机上的应用程序(不是网站,也不是超文本传输协议服务器)。 我怎样才能做到这一点?我只是走了这么远:我正在客户端上生成salt散列,从中形成一个mcf并将其发送到我的服务器。将mcf保存到数据库。我没有发送密码,只发送了实际

  • 我正在尝试使用Shiro对我正在构建的JSF Web应用程序进行身份验证和授权。不幸的是,我仍然有一些困难缠绕我的头如何把所有的东西放在一起。 我已经成功地(100%使用shiro.ini文件)将身份验证配置回存储测试凭据集的JDBC领域。当凭据以明文形式存储时,它对我来说非常有效。 我的最终目标是统一MySQL数据库中的现有凭证集。密码存储为SHA-256盐哈希。我花了一整天的时间阅读可用的文档

  • 在本章中,我们将使用Firebase Facebook身份验证对用户进行身份验证。 第1步 - 启用Facebook身份验证 我们需要打开Firebase信息中心,然后在侧边菜单中点击Auth 。 接下来,我们需要在标签栏中选择SIGN-IN-METHOD 。 我们将启用Facebook身份验证并保持打开状态,因为我们需要在完成第2步时添加App ID和App Secret 。 第2步 - 创建F

  • 我使用包括Spring Security和Vaadin在内的https://start.spring.io设置了一个Spring Boot项目。然后我将Vaadin版本设置为22.0.4,并按照本教程使用Vaadin Flow和Spring Security设置登录页面:https://vaadin.com/docs/v22/flow/tutorial/login-and-authenticati

  • 创建密钥对并通过ssh-copy-id将公钥发送到服务器后,我仍然无法在没有密码的情况下登录 ssh-v user@host的输出 调试1:在/home/pumba/.ssh/known_hosts:1中找到密钥 debug1:在134217728块后重新密钥 调试1:SSH2_MSG_NEWKEYS已发送 debug1:应为SSH2_MSG_NewKeys debug1:在134217728块后

  • 我一直在尝试使用AWS Cognito实现无密码身份验证 我关注了这些文章:https://medium.com/digicred/password-less-authentication-in-cognito-cafa016d4db7 https://medium.com/@pjatocheseminario/passwordless-api-using-cognito-and-serverle