首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果从浏览器调用,Laravel 5会话在Postman中无法工作

如果从浏览器调用,Laravel 5会话在Postman中无法工作
EN

Stack Overflow用户
提问于 2015-12-28 12:46:51
回答 2查看 4.1K关注 0票数 1

登录后,我使用会话来设置用户详细信息。如果我使用postman,我可以获得会话的详细信息。如果我尝试从我的浏览器登录,它显示为空

这是我的控制器

代码语言:javascript
运行
复制
namespace App\Http\Controllers;
use App\Models\User;
use Session;

class UserController extends Controller {

  public function login(){
    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);
    $requestArray = array();
    foreach($request as $key => $value){
      $requestArray[$key] = $value;
    }
    $user = User::login($requestArray);
    Session::put("activeuser", $user);
    Session::save();
    return json_encode(array('result'=>Session::get("activeuser")));

  }

获取会话详细信息的控制器

代码语言:javascript
运行
复制
namespace App\Http\Controllers;
use Session;


class ThisSessionController extends Controller {

  public function getdetails($key)
  {

        return json_encode(array($key => Session::get($key)));

  }

}

config/session.php

代码语言:javascript
运行
复制
'driver' =>  'file',

编辑1作为参考,我使用laravel只进行api调用。因此,我的域将是api.mydomain.com/sessiondetails/activeuser

这就是问题所在吗?

编辑2

第一个对象是对会话get url的ajax调用,第二个对象是登录成功后的返回值。

两个令牌完全不同。

编辑-3

我已经用jwt更新了laravel,但它抛出的JWT::Factory不可用。下面是我的更新代码。

代码语言:javascript
运行
复制
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Requests;
use JWTAuth;
use Tymon\JWTAuth\JWTManager as JWT;
use Tymon\JWTAuth\Exceptions\JWTException;

class UserController extends Controller {

  public function login(Request $request){

   $credentials = $request->only('username', 'password');
   $user = User::login($requestArray);
   if($user){

     $payload = JWTFactory::make($credentials);
     $token = JWTAuth::encode($payload);
   }


    return json_encode(array('result'=>$token));

  }

编辑-4

我更改了登录函数中的代码,得到的结果为

代码语言:javascript
运行
复制
{"token":{}}

UserController@登录代码

代码语言:javascript
运行
复制
$customClaims = ['foo' => 'bar', 'baz' => 'bob']; 
$payload = app('tymon.jwt.payload.factory')->make($customClaims);
$token = JWTAuth::encode($payload);

编辑5

我可以用laravel生成令牌的最后一个工作代码是

代码语言:javascript
运行
复制
public function login(Request $request){
    $credentials = $request->only('username', 'password');

   try {
        $user = User::login($credentials);
        if(!$user)
          throw new Exception("Error Processing Request", 1);

   } catch (Exception $e) {
       return response()->json(['error' => false]);
   }

   $token = JWTAuth::fromUser($user);

   return response()->json(compact('token'));  

  }
EN

Stack Overflow用户

发布于 2021-02-27 16:48:55

首先_您必须在web路由中登录用户,而不是api。第二_如果您的会话在普通请求中工作,而不是在您的应用程序中工作,您可以使用cors中间件来发送跨平台请求,如下所示

代码语言:javascript
运行
复制
Route::group(['middleware' => ['cors']], function()
{

    Route::post('/auth/register',[UserApiController::class, 'register'] );
    Route::post('/auth/login',[UserApiController::class, 'login'] );
    Route::post('/auth/verify',[UserApiController::class, 'verify'] );

});

在laravel中,默认情况下不能使用cors中间件,但可以从此处安装npm包https://github.com/fruitcake/laravel-cors

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34487807

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档