如何从laravel中的相关表中获取数据,并使用jwt-auth将jwt-auth标记作为参数传递给 - > find()emthod

时间:2016-10-23 01:12:08

标签: angularjs authentication laravel-5 jwt

我一直在使用jwt-auth进行laravel身份验证,AngularJs作为前端,登录部分http://127.0.0.1/login工作正常但是试图从互联网上搜索使用返回的令牌传递给它的方法我的User::with('userDetail', 'userContact')->find($id)以便路由http://127.0.0.1/login/user返回连接表(user_contact,user_detail)传递令牌,解码它并仅返回与该用户相关的数据。帮助。 示例代码

用户模型

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $table = 'user';
protected $fillable = [
    'id', 'email', 'password'
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token', 'updated_at', 'created_at'
];

public function userContact()
{
    return $this->hasOne('App\UserContact', 'user_id');
}

public function userDetail()
{
    return $this->hasOne('App\UserDetail', 'user_id');
}
}

UserContact模型

<?php

 namespace App;

use Illuminate\Database\Eloquent\Model;

class UserContact extends Model
{
protected $table = 'user_contact';

public function userContact()
{
    return $this->belongsTo('App\User');
}

}

UserDetail Model

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserDetail extends Model
{
protected $table = 'user_detail';

public function userDetail()
{
    return $this->belongsTo('App\User');
}

public function role()
{
    return $this->belongsTo('App\UserRole');
}
}

AuthenticationController代码

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Facades\JWTAuth;

class AuthenticationController extends Controller
{
public function __construct()
{
    $this->middleware('jwt.auth', ['except' => ['authenticate', 'register',    'getLastInsertedMaximumUserId']]);
}

public function authenticate(Request $request)
{
    $credentials = $request->only('email', 'password');
    try {
        if (!$token = JWTAuth::attempt($credentials)) {
            return response()->json(['error' => 'Wrong Login Credentials'], 403);
        }
    } catch (JWTException $ex) {
        return response()->json(['error' => 'Login Failed']);
    }
    return response()->json(compact('token'));
}

public function getAuthenticatedUser()
{
    try {

        if (!$user = JWTAuth::parseToken()->authenticate()) {
            return response()->json(['user not found'], 404);
        } else {
        }

    } catch (JWTException$e) {

        return response()->json(['Kindly login'], $e->getStatusCode());

    } catch (JWTException $e) {

        return response()->json(['Sorry Invalid login Request'], $e->getStatusCode());

    } catch (JWTException $e) {

        return response()->json(['Wrong login Request'], $e->getStatusCode());

    }

    *
  

//令牌有效,我们通过sub找到了用户   声称,这是想要做某事的地方   .User :: with(&#39; userDetail&#39;,&#39; userContact&#39;) - &gt; find($ id)但我想要   用登录重新登记的令牌替换$ id,是否可能?

return response()->json(compact('user'));
}

/**
 * registers new user
 * @param Request $request
 */
public function register(Request $request)
{
    $id = 1000;
    $newUser = $request->all();
    $password = Hash::make($request->input('password'));
    $newUser['password'] = $password;
    if ($this->getLastInsertedMaximumUserId() !== null && $this->getLastInsertedMaximumUserId() >= $id) {
        $userId = $newUser['id'] = $this->getLastInsertedMaximumUserId() + 1;
    } else {
        $newUser['id'] = $id;
    }
    return User::create($newUser);
}

public function getLastInsertedMaximumUserId()
{
    $maximumId = DB::select('SELECT max(`id`) as `id` FROM `user`');
    foreach ($maximumId as $maxId) {
        return $maxId->id;
    }

}
}

0 个答案:

没有答案